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

时间:2014-02-26 00:19:34

标签: c++ pointers char

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

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);

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

3 个答案:

答案 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 *允许别名。