【问题标题】:Char array to Int ConversionChar 数组到 Int 的转换
【发布时间】:2019-04-18 14:09:43
【问题描述】:

从事一个新项目并遇到问题。 我在 char 数组中有一大块字节。 Big Endian 中有 4 个字节需要转换为 int。 当我尝试将 4 字节 char 数组逐个字节转换为 int 字节时,它们中的一个以否定形式出现。 有什么解决方案/算法吗?

谢谢!

【问题讨论】:

  • 向我们展示代码。请注意,char 可能默认已签名,因此您可能希望明确使用 unsigned char

标签: c memory endianness


【解决方案1】:

网络代码?这就是ntohlhtonl 的用途。这些函数在本地字节序和大字节序之间转换。

读取整数:

 int value = (int) ntohl(*(int32_t *)(buffer + offset));

写一个整数:

 *((int32_t *)(buffer + offset)) = htonl((int32_t)value);

【讨论】:

    【解决方案2】:

    您可以使用 atoi 来转换您的数组。

    atoi man

    要使用 atoi,您需要数组以“\0”结尾,但您可以这样做:

    • strncpy 将 n 个字节复制到临时缓冲区。
    • 在 tmp 缓冲区末尾添加“\0”。
    • 在这个临时缓冲区上使用 atoi。

    您可以在循环内重复上述操作,并使用 strncpy 参数 (n) 选择要转换的字节数

    strncpy man

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2012-10-20
      相关资源
      最近更新 更多