我有一个 txt 文件,其中每行包含十六进制形式的整数,例如: 232B2344 A2BC34893 DEF9433 …… 我想要一种优雅的方式在 C++ 中读取这个 .txt 文件并将它们存储在数组中,以便我可以对它们进行计算。另外给出十六进制 232B2344 说我想能够说出每个字节条目的值
首先包含标题
#include "sstream"
然后使用文件处理获取简单 char[] 数组字符串中的十六进制值。
char str[100];
声明一个 Unsigned 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;
uint32_t tmp;
std::ifstream numbersFile( fileName.c_str() );
while( numbersFile.good() )
{
getline( numbersFile, line );
std::stringstream ss;
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}
。
要读取十六进制格式的值 - 使用
std::hex
中的 <iomanip>
。就像这个非常简短的例子一样:
#include <iostream>
#include <iomanip>
int main() {
int value;
std::cin >> std::hex >> value;
std::cout << value;
}
只需读取数组元素的次数即可。