0

ユーザーが変数に 2 つの文字を入力するコードがありstringます。ユーザー入力の長さが2文字のみであり、有効な16進数のみが含まれていることを確認する関数があります。

これらの数字を 32 バイト長のバイナリ ファイルに書き込みたいと考えています。私は試した:

    outFile.write((char*)&string[0], 1);

テストのために32回実行されるループ(一度に1バイトずつ書き込みたい)ですが、実際のchar自体ではなく、charのASCIIコードを書き込むだけです。ニブルを書き込み、ニブルをスキップすることを期待していましたが、代わりに 1 バイトの ASCII 情報を書き込みました。だから私は試しました:

    outFile.write((unsigned char*)&string[0], 1);

しかし、私のコンパイラは、それが無効なキャストであると不平を言っています。

文字列を C スタイルの文字列に変換せずにこの問題を解決したいと考えています。stringつまり、 2 つの文字を含めて、1 バイトの情報を表現したいと考えています。4 つではありません (およびヌル文字)。

4

2 に答える 2

1

整数を表す文字列があります。したがって、文字列を整数に変換します。

unsigned char byte = (unsigned char)std::stoi(string, 0, 16);
outFile:write(static_cast<const char*>(&byte), 1);
于 2013-02-07T01:11:27.187 に答える
0

行方不明のstoiの回避策として、これを行うことができます。

#include <iostream>
#include <sstream>
#include <ios>

char hexnum[]{"2F"}; // or whatever, upper or lowercase hex digits allowed.
std::istringstream input(hexnum);
int num=0;
input >> std::hex >> num;
unsigned char byte = num;
outFile.write(static_cast<const char*>(&byte), 1);
于 2013-02-07T17:01:54.480 に答える