字符数组到整数的转换

时间:2019-04-18 14:09:44

标签: c memory endianness

在一个新项目上工作时遇到问题。 我在char数组中得到了很多字节。 我需要将Big Endian中的4个字节转换为int。 当我尝试将4个字节的char数组转换为一个字节又一个字节的int字节时,它们中的一个以负数形式出现。 有解决方案/算法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

要读取整数:

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

要写一个整数:

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

答案 1 :(得分:-1)

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

atoi man

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

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

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

strncpy man