C++ 如何将 char[] 中的多个字节转换为一个整数
c++ how to cast multiple bytes from char[] into one integer
我正在尝试将字符数组转换为整数:
const int LENGTH = 3 * sizeof(int);
char data[LENGTH];
/* data is filled */
for (int i = 0; i < LENGTH; i += sizeof(int)) {
std::cout << "Integer: " << (int)data[i] << std::endl;
}
for (int i = 0; i < LENGTH; i += sizeof(short)) {
std::cout << (short)data[i] << " ";
}
输出为:
Integer: 0
Integer: 0
Integer: 0
0 3 0 3 0 3
我希望如果短裤不为零,整数也必须为零。可能这里看到的转换只适用于那一个字符/字节,而不是预期的 4 个字节。我该如何解决这个问题?
需要明确的是:我希望将字节 0 到 3 转换为一个整数,然后将下一个(4 到 7)转换为下一个整数,依此类推......
您正在将data[i]
转换为int
。但是,data[i]
是一个char
,所以你可以投射你想要的一切,投射不会神奇地读取额外的字节。相反,您必须将data
指针强制转换为int *
然后才取消引用它。
基本上,你最终会得到这样的东西:
auto voidPtr = static_cast<void const *>(data);
auto intPtr = static_cast<int const *>(voidPtr);
for (size_t i = 0; i < LENGTH / sizeof(int); ++i) {
std::cout << "Int: " << intPtr[i] << "n";
}
请注意,i
每次仅递增 1,但增量数除以sizeof(int)
。这是因为当您为int *
编制索引时,编译器将自动执行正确的操作。
还要注意,你得到的可能不是你所期望的。取决于您运行此任务的计算机是大端还是小端。
PS:通常不鼓励使用C型转换,static_cast<int>
更明确地显示你想要实现的目标。
正如@underscore_d指出的,这个答案*((int*)&data[i])
将导致未定义的行为,应该使用memcpy
。
int intData[3];
std::memcpy(intData, data, sizeof data);
for (int i = 0; i < 3; i++) {
std::cout << "int: " << intData[i] << " ";
}
工作正常,符合MEMCPY的参考。
相关文章:
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 如何在连接器 C++ 中将原始字节转换为字符串
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 将字节数组转换为多维数组
- C++如何将字符数组转换为字节向量(向量<byte>)
- 如何在C++中将字节向量(std::vector<uint8_t>)转换为不同的uint32_t,uint16_t和uint8_t变量
- 将字符串转换为无符号字符数组/字节数组
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 将以 null 结尾的字节字符串转换为原始字符串文本
- 正在转换结构数据的字节序
- 如何将 CString 转换为字节 [] 数组?
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 使用 ESP8266/8285 将字符串从 Web 服务器转换为字节数组
- 编译时将字符*转换为字节
- 将字节数组转换为对象C++ |C++中的 C# 位转换器
- C++转换字节
- 将整型转换字节中的字节更改为整数
- c++从字符串化字节转换字节数组