繁体   English   中英

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

[英]Converting byte array to unsigned long in C++

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

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

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

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 *作为别名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM