[英]C++ Aligned Array or vector of “unsigned long” on 64-byte boundary, and associated delete[]
[英]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.