从 C++ 中的 txt 文件中读取十六进制

Reading hexadecimals from a txt file in C++

本文关键字:读取 十六进制 文件 txt C++ 中的      更新时间:2023-10-16

我有一个txt文件,每行包含十六进制形式的整数,如下所示:232B2344A2BC34893DEF9433.....我想要一种优雅的方式来读取C++中的.txt文件并将它们存储在数组中,以便我可以对它们进行计算。同样给定十六进制 232B2344 说我想说出每个字节条目的值

首先包含一个标头

#include "sstream"

然后使用文件处理获取简单 char[] 数组字符串中的十六进制值。

夏亚斯特[100];

声明一个无符号的 int 变量...

unsigned int value;

然后声明一个"std::stringstream"变量,例如

std::stringstream ss;
ss<<std::hex<<str;
ss>>value;

现在,"值"以整数的形式包含文件中的十六进制值。

据您描述,文件中的每个数字都是一个 4 字节的无符号整数(适合 32 位)。这里你有一个 c++ 版本,用于解析文件并获取数字数组:

std::vector<std::string> fromFileToArray( const std::string & fileName )
{
  std::string line;
  std::vector<uint32_t> numbers;
  std::stringstream ss;
  uint32_t tmp;
  std::ifstream numbersFile( fileName.c_str() );
  while( numbersFile.good() )
  {
    getline( numbersFile, line );
    ss << std::hex << line;
    ss >> tmp;
    numbers.push_back( tmp );
  }
}

这个怎么样(虽然它是用 C 函数编写的,但可以帮助我移植它以使用C++函数):

const char hexstring[] = "deadbeef10203040b00b1e50", *pos = hexstring;
unsigned char val[12];
size_t count = 0;
/* WARNING: no sanitization or error-checking whatsoever - MAGIC. DO NOT TOUCH. */
for(count = 0; count < sizeof(val)/sizeof(val[0]); count++) {
    sscanf(pos, "%2hhx", &val[count]);
    pos += 2 * sizeof(char);
}
/* Does it work? */
printf("0x");
for(count = 0; count < sizeof(val)/sizeof(val[0]); count++)
    printf("%02x", val[count]);
printf("n");

如果字符串中有奇数个十六进制数字,则必须确保以开头 0 为前缀。例如,上面的示例将错误地评估字符串"f00f5" {0xf0, 0x0f, 0x05},而不是正确的{0x0f, 0x00, 0xf5}

要以十六进制格式读取值 - 使用 <iomanip> 中的std::hex。就像这个非常简短的例子:

#include <iostream>
#include <iomanip>
int main() {
  int value;
  std::cin >> std::hex >> value;
  std::cout << value;
}

只需读取数组包含元素的次数即可。