如何将字符数组解析为整数
How do I parse a char array as integer?
我有一个像这样的缓冲区char数组:
char buf[4];
buf[0] = 0x82;
buf[1] = 0x7e;
buf[2] = 0x01;
buf[3] = 0x00;
我现在想读char 2和3一起作为一个16位无符号整数在大端。如何使用C(++)标准工具做到这一点?
目前我只知道手动解决方案:
int length = but[3];
length += but[2] << 8;
这对于16位整数来说很容易,但我还需要解析32位整数,这会使事情变得有点困难。有没有一个标准库中的函数可以帮我做这个?
博多
您可以使用ntohs
和ntohl
(在小端序系统上):
#include <iostream>
#include <cstring>
#include <arpa/inet.h>
int main(){
char buf[4];
buf[0] = 0x82;
buf[1] = 0x7e;
buf[2] = 0x01;
buf[3] = 0x00;
uint16_t raw16;
uint32_t raw32;
memcpy(&raw16, buf + 2, 2);
memcpy(&raw32, buf , 4);
uint16_t len16 = ntohs(raw16);
uint32_t len32 = ntohl(raw32);
std::cout << len16 << std::endl;
std::cout << len32 << std::endl;
return 0;
}
或者您可以交换字节并将其转换为适当的类型,而不是移动
您可以使用联合:
union conv {
char arr[4];
short value16[2];
int value32;
};
conv tmp;
tmp.arr[0] = buf[0];
tmp.arr[1] = buf[1];
tmp.arr[2] = buf[2];
tmp.arr[3] = buf[3];
或memcpy:
memcpy(&length, buf, sizeof(length))
很可能是最简单的修复方法。
int iResult = atoi(buf);
相关文章:
- 从二进制文件中读取整数数组
- 新的整数数组向右移动?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 从两个 4x64 位整数数组中获取取模
- 字符到整数数组
- 从函数参数 [C++] 复制整数数组
- 指向整数数组和打印总和的指针
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 线程安全整数数组?
- 整数数组中最长的回文
- 在大整数数组中查找子数组
- 查找整数数组中最接近的数字
- 创建<int>对整数数组指针的矢量引用 (C++)
- 整数指针数组的元素是否可以指向整数数组?
- 如何将整数数组相乘得到一个数字?
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- 将文本文件读入整数数组