我正在从文件中读取二进制数据:
char* buffIn = new char[8];
ifstream inFile(path, ifstream::binary);
inFile.read(buffIn, 8);
然后我想将char *读入(作为二进制)转换为unsigned long但我遇到了问题 - 我不太确定发生了什么,但是例如0x00000000000ACD被解释为0xFFFFFFFFFFFFCD - 我怀疑所有从char *转换为unsigned long ...
时,0x00字节会导致某种问题unsigned long number = *(buffIn);
我该如何正确地做到这一点?
答案 0 :(得分:4)
由于buffIn
的类型为char
指针,当您执行*(buffIn)
时,您只是抓取一个字符。您必须将内存地址重新解释为unsigned long
指针,然后取消引用它。
unsigned long number = *((unsigned long*)buffIn);
答案 1 :(得分:0)
除了重新构造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];
答案 2 :(得分:0)
尝试类似
的内容unsigned long* buffInL = new unsigned long[2];
char* buffIn=(char*)buffInL;
ifstream inFile(path, ifstream::binary);
inFile.read(buffIn, 8);
与其他类型不同,char *允许别名。