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

时间:2012-09-24 09:24:35

标签: c++ hex

我有一个txt文件,每行包含十六进制形式的整数,如: 232B2344 A2BC34893 DEF9433 ..... 我想用一种优雅的方式在C ++中读取这个.txt文件并将它们存储在数组中,以便我可以对它们进行计算。另外,给出了十六进制232B2344,我希望能够说出每个字节条目的值

4 个答案:

答案 0 :(得分:4)

首先包含标题

#include "sstream"

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

char str [100];

声明一个Unsigned int变量......

unsigned int value;

然后声明一个“std :: stringstream”变量。 e.g。

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

现在“value”包含整数形式的文件中的十六进制值。

答案 1 :(得分:2)

根据您的描述,文件中的每个数字都是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 );
  }
}

答案 2 :(得分:0)

这个怎么样(虽然用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}

答案 3 :(得分:0)

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

#include <iostream>
#include <iomanip>

int main() {
  int value;
  std::cin >> std::hex >> value;
  std::cout << value;
}

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