1

我有一个 txt 文件,其中每行包含十六进制形式的整数,例如:232B2344 A2BC34893 DEF9433 .....他们。还给定十六进制 232B2344 说我想说明每个字节条目的值

4

4 回答 4

3

首先包括一个标题

#include "sstream"

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

字符 str[100];

声明一个 Unsigned int 变量...

unsigned int value;

然后声明一个“std::stringstream”变量。例如

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

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

于 2012-09-24T10:53:54.910 回答
2

据您描述,文件中的每个数字都是一个 4 字节的无符号整数(适合 32 位)。在这里,您有一个用于解析文件并获取 numbers 数组的 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 );
  }
}
于 2012-09-24T09:52:09.650 回答
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}.

于 2012-09-24T09:36:00.073 回答
0

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

#include <iostream>
#include <iomanip>

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

只要你的数组有元素就读多少次。

于 2012-09-24T09:51:41.317 回答