我想读取我的文件的一些字节作为整数值。例如,文件包含值0x000003BB
,等于955。
我可以这样读取数据:
ifstream input ("C:/Desktop/myFile", ios::binary);
uint8_t buffer[4] = {0};
input.read((char*)buffer, sizeof(buffer));
但是我如何将缓冲区数组转换为相应的int值955?如果可能的话,以endianness独立的方式,因为这和Big Endian字节顺序中的其他文件,但我的系统是Little Endian字节顺序。谢谢:))
答案 0 :(得分:2)
我不确定这是最好的解决方案,但它确实有效。
uint8_t buffer[4] = {0};
input.read((char*)buffer, sizeof(buffer));
unsigned int result = buffer[0];
result = (result << 8) | buffer[1];
result = (result << 8) | buffer[2];
result = (result << 8) | buffer[3];
答案 1 :(得分:1)
无需使用uint8_t
数组,您可以直接读入4字节整数:
uint32_t data;
input.read((char*)&data, sizeof(data));
编辑:
此代码适用于我的VC ++编译器:
#include<stdint.h>
#include<intrin.h>
#include<iostream>
int main()
{
uint32_t data;
data = 0xBB030000;
data = _byteswap_ulong(data);
std::cout << data;
}
如果您使用的是GCC,则需要将_byteswap_ulong
替换为__builtin_bswap32
。如果你需要独立的代码,你需要自己创建(可能在这些编译器内在函数之上)。
答案 2 :(得分:1)
如果您的操作系统支持POSIX或是Windows,那么您可以使用ntohl
:
int data;
input >> data;
data = ntohl(data);