在C++中将字节数组转换为无符号长

Converting byte array to unsigned long in C++

本文关键字:转换 无符号 数组 字节数 C++ 字节      更新时间:2023-10-16

我正在从一个文件读取二进制数据:

char* buffIn = new char[8];
ifstream inFile(path, ifstream::binary);
inFile.read(buffIn, 8);

然后我想将读取的char*(二进制)转换为无符号长,但我遇到了问题-我不太确定发生了什么,但例如0x00000000000ACD被解释为0xFFFFFFFFFCD-我怀疑所有0x00字节在从char*转换为无签名长时都会引起某种问题。。。

unsigned long number = *(buffIn);

我该如何正确地做到这一点?

由于buffIn是类型为char的指针,所以当执行*(buffIn)时,您只获取一个字符。您必须将内存地址重新解释为unsigned long指针,然后取消对它的引用

unsigned long number = *((unsigned long*)buffIn);

除了重铸char[8](它只读取第一个unsigned long,长度为32位),您还可以使用一些简单的逐位操作

unsigned long value = (((unsigned long)buffin[0]) << 24) | (((unsigned long)buffin[1]) << 16) | (((unsigned long)buffin[2]) << 8) | (unsigned long)buffin[3];

尝试类似的东西

unsigned long* buffInL = new unsigned long[2];
char* buffIn=(char*)buffInL;
ifstream inFile(path, ifstream::binary);
inFile.read(buffIn, 8);

与其他类型不同,char*被允许进行别名。