1

各行に 232B2344 A2BC34893 DEF9433 のような整数を含む txt ファイルがあります: 232B2344 A2BC34893 DEF9433 ..... この .txt ファイルを C++ で読み取り、それらを配列に格納して計算できるようにするエレガントな方法が必要です。彼ら。また、16 進数の 232B2344 を考えると、各バイト エントリの値を言う立場になりたいと思います。

4

4 に答える 4

3

最初にヘッダーを含めます

#include "sstream"

次に、ファイル処理を使用して単純な char[] 配列文字列で 16 進値を取得します。

char str[100];

Unsigned int 変数を宣言する...

unsigned int value;

次に、「std::stringstream」変数を宣言します。例えば

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

現在、「値」にはファイル内の 16 進値が整数の形式で含まれています。

于 2012-09-24T10:53:54.910 に答える
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 );
  }
}
于 2012-09-24T09:52:09.650 に答える
0

値を 16 進形式で読み取るには、 from を使用std::hex<iomanip>ます。この非常に短い例のように:

#include <iostream>
#include <iomanip>

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

配列の要素の数だけ読み取るだけです。

于 2012-09-24T09:51:41.317 に答える
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");

文字列内の 16 進数の数が奇数の場合は、先頭に 0 を付けることを確認する必要があります。たとえば、文字列"f00f5"{0xf0, 0x0f, 0x05}、適切な{0x0f, 0x00, 0xf5}.

于 2012-09-24T09:36:00.073 に答える