读取 64 位整数二进制文件
Reading 64 bit integers binary file
我要求通过获取 64 位大小的块来读取二进制文件的正确方法。我目前正在这样做:
uint64_t uInt;
char c;
if(istr)
{
while (true)
{
istr.get(c);
if (istr.eof())
break;
istr.putback(c);
istr.read(reinterpret_cast<char *>(&uInt), sizeof(uInt));
tea.encryptBlock(uInt, ostr);
}
}
istr 和 ostr 是我想要读/写的文件的流。虽然它在调试时适用于文件的大部分,但我使用了二进制查看器,似乎最后 32 位是错误的(我需要它们,因为我正在尝试使用微小的加密算法进行加密/解密,该算法使用 64 位块分成两半(。我不确定是什么导致了这个问题,我想也许我应该尝试只读取字符,然后使用这样的东西组合它们:
int64_t charTo64bitNum(char *a) {
int64_t n = 0;
n = (((int64_t)a[0] << 56) & 0xFF00000000000000U)
| (((int64_t)a[1] << 48) & 0x00FF000000000000U)
| (((int64_t)a[2] << 40) & 0x0000FF0000000000U)
| (((int64_t)a[3] << 32) & 0x000000FF00000000U)
| ((a[4] << 24) & 0x00000000FF000000U)
| ((a[5] << 16) & 0x0000000000FF0000U)
| ((a[6] << 8) & 0x000000000000FF00U)
| (a[7] & 0x00000000000000FFU);
return n;
}
但它似乎不起作用。
尝试从文件中读取 8 个字节的块到 uint8_t buff[8]
,然后执行
uint8_t buff[] = { 0,1,2,3,4,5,6,7 };
uint64_t val = (uint64_t)buff[7]
| ((uint64_t)buff[6] << 8)
| ((uint64_t)buff[5] << 16)
| ((uint64_t)buff[4] << 24)
| ((uint64_t)buff[3] << 32)
| ((uint64_t)buff[2] << 40)
| ((uint64_t)buff[1] << 48)
| ((uint64_t)buff[0] << 56);
// buff == 0x0001020304050607LL
// to split:
uint32_t val1 = (uint32_t)(val & ((1 << 32) - 1));
uint32_t val2 = (uint32_t)(val >> 32);
更新:反转指数
//[0]83 [1]111 [2]109 [3]101 [4]32 [5]116 [6]101 [7]120
uint8_t arr[] = { 83, 111, 109, 101, 32, 116, 101, 120 };
uint64_t expected = 8675467939688574803;
uint64_t val = (uint64_t)arr[0]
| ((uint64_t)arr[1] << 8)
| ((uint64_t)arr[2] << 16)
| ((uint64_t)arr[3] << 24)
| ((uint64_t)arr[4] << 32)
| ((uint64_t)arr[5] << 40)
| ((uint64_t)arr[6] << 48)
| ((uint64_t)arr[7] << 56);
相关文章:
- 从二进制文件中读取整数数组
- 读取二进制文件并解释为整数
- 读取 64 位整数二进制文件
- 我正在尝试读取一个包含字符串和整数的二进制文件..并打印出与字符串对应的整数
- 将fortran生成的二进制文件读取到C++中的带符号整数数组中
- 将从二进制文件读取的字符串转换为整数
- 从/到C 的二进制文件读取和写作整数
- 无法将大型无符号整数正确写入二进制文件 - C++
- 从二进制文件 c++ 读取 16 位整数
- 正在尝试读取4字节无符号整数的二进制文件并转换为伏特
- 如何仅将 16 位分配给二进制文件中的任何整数,而不是C++中的正常 32 位
- 读取二进制文件并转换为整数数组时出现问题
- 如何将整数和双精度输出到二进制文件
- 将整数写入二进制文件C++时出现问题
- 二进制文件写入后读取负整数
- Visual C++-将双精度和整数写入二进制文件
- 使用C++将整数写入二进制文件
- 如何在表示二进制文件的字符串中查找整数
- c++如何将整数写入二进制文件,保持4字节长
- 为什么使用write函数而不是整数将奇怪的符号写入二进制文件