在C ++中将字节数组转换为unsigned long

adr*_*min 2 c++ pointers char

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

char* buffIn = new char[8];
ifstream inFile(path, ifstream::binary);
inFile.read(buffIn, 8);
Run Code Online (Sandbox Code Playgroud)

然后,我想将读取的char *(以二进制形式)转换为无符号长整数,但是我遇到了问题-我不太确定发生了什么,但是例如0x00000000000ACD被解释为0xFFFFFFFFFFFFCD-我怀疑所有0x00字节都是从char *转换为unsigned long时引起某种问题...

unsigned long number = *(buffIn);
Run Code Online (Sandbox Code Playgroud)

如何正确执行此操作?

imr*_*eal 5

因为buffIn是类型char指针,所以当您执行操作时,*(buffIn)您仅会抓取一个字符。您必须将内存地址重新解释为unsigned long指针,然后取消引用。

unsigned long number = *((unsigned long*)buffIn);
Run Code Online (Sandbox Code Playgroud)