将从二进制文件读取的字符串转换为整数
converting a string read from binary file to integer
我有一个二进制文件。 我使用 fstream 一次读取 16 个字节。
我想将其转换为整数。我试了试阿托伊。但它没有用。在python中,我们可以通过使用stringyield.encode('utf-8')转换为字节流,然后使用int(bytestring.hex(),16将其转换为int来做到这一点。我们应该遵循在python中完成的elloborate步骤,还是有没有办法直接转换它?
ifstream file(binfile, ios::in | ios::binary | ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char[size];
file.seekg(0, ios::beg);
while (!file.eof())
{
file.read(memblock, 16);
int a = atoi(memblock); // doesnt work 0 always
cout << a << "n";
memset(memblock, 0, sizeof(memblock));
}
file.close();
编辑:
这是文件的示例内容。
53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00
04 00 01 01 00 40 20 20 00 00 05 A3 00 00 00 47
00 00 00 2E 00 00 00 3B 00 00 00 04 00 00 00 01
我需要将其读取为 16 个字节,即一次读取 32 个十六进制数字。(即示例文件内容中的一行)并将其转换为整数。所以当阅读 53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00 时,我应该得到,110748049513798795666017677735771517696
但我做不到。即使在尝试 strtoull 之后,我总是得到 0。我是否读错了文件,或者我错过了什么。
你在这里有很多问题。首先,C++没有标准的 128 位整数类型。您也许可以找到编译器扩展,例如请参阅 gcc 中有 128 位整数吗?或者C++中是否有 128 位整数?
其次,您正在尝试解码原始字节而不是字符串。 atoi
将停止在它遇到的第一个非数字字符处,256 次中有 246 次将是第一个字节,因此它返回零。如果你很不幸,你会读取16个有效数字,atoi
将开始读取未初始化的内存,导致未定义的行为。
反正你不需要atoi
,你的问题比这简单得多。您只需要将 16 个字节组装成一个整数,这可以通过移位和or
运算符来完成。唯一的复杂之处在于,read
想要一个可能会有符号的char
类型,而你需要无符号的字节。
ifstream file(binfile, ios::in | ios::binary);
char memblock[16];
while (file.read(memblock, 16))
{
uint128_t a = 0;
for (int i = 0; i < 16; ++i)
{
a = (a << 8) | (static_cast<unsigned int>(memblock[i]) & 0xff);
}
cout << a << "n";
}
file.close();
它的数字是二进制的,你想要的是:
short value ;
file.read(&value, sizeof (value));
根据文件的写入方式和处理器,您可能必须使用位操作反转值中的字节。
- 努力将整数转换为链表。不知道我在这里做错了什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在C++中将整数转换为其数字数组
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 如何将整数字符串转换为整数的二维向量?
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何检测 std::vector::emplace_back 上的隐式转换损失整数精度
- 如何防止双精度值到整数的隐式转换
- 为什么此指针值不能转换为整数的规则是什么?
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 如何使用 STL 算法将整数向量转换为字符串向量?
- 无法将"整数 (*)[m]"转换为"整数 (*)[100000]
- 静态强制转换允许转换对象指针,但不允许转换整数