在C++中将字节数组转换为无符号长
Converting byte array to unsigned long in C++
我正在从一个文件读取二进制数据:
char* buffIn = new char[8];
ifstream inFile(path, ifstream::binary);
inFile.read(buffIn, 8);
然后我想将读取的char*(二进制)转换为无符号长,但我遇到了问题-我不太确定发生了什么,但例如0x00000000000ACD被解释为0xFFFFFFFFFCD-我怀疑所有0x00字节在从char*转换为无签名长时都会引起某种问题。。。
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*被允许进行别名。
相关文章:
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 将浮点数转换为无符号字符数组并打印出来
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 将无符号转换为复杂<int>原因符号转换警告
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 将字符串转换为无符号字符数组/字节数组
- 转换“;无符号字符*”;至“;char*”;(和字符串)