2

これは私を狂わせています。私は初級/中級の C++ er で、簡単に思えることをする必要があります。たくさんの 16 進文字を含む文字列があります。それらはtxtファイルから入力されました。弦はこんな感じ

07FF3901FF030302FF3f0007FF3901FF030302FF3f00.... etc for a while

これらの 16 進値を .dat ファイルに簡単に書き込むにはどうすればよいですか? 試行するたびに、16 進値ではなくテキストとして書き込みます。バイトごとに「\x」を挿入する for ループを既に作成しようとしましたが、それでもテキストとして書き込まれます。

どんな助けでも大歓迎です:)

注: 明らかに、これができるとしても、C++ についてあまり知らないので、頭の中で物事を使用しないようにしてください。または、少なくとも少し説明してください。プウィーズ:)

4

1 に答える 1

1

char(ascii) と hex 値の違いを明確にする必要があります。

x.txt で次のように想定します。

アスキーは次のように読み取ります:「FE」

バイナリでは、x.txt は「0x4645(0100 0110 0100 0101)」です。アスキーでは、「F」=0x46、「E」=0x45 です。

すべてがバイナリ コードで格納されていることに注意してください。

x.dat を取得したい場合:

x.datのバイナリコードは「0xFE(1111 1110)」

したがって、ASCII テキストを適切な 16 進値に変換してから、x.dat に書き込む必要があります。

サンプルコード:

#include<iostream>
#include<cstdio>
using namespace std;
char s[]="FE";
char r;
int cal(char c)// cal the coresponding value in hex of ascii char c
{
    if (c<='9'&&c>='0') return c-'0';
    if (c<='f'&&c>='a') return c-'a'+10;
    if (c<='F'&&c>='A') return c-'A'+10;
}
void print2(char c)//print the binary code of char c
{
    for(int i=7;i>=0;i--)
        if ((1<<i)&c) cout << 1;
        else cout << 0;
}
int main()
{
    freopen("x.dat","w",stdout);// every thing you output to stdout will be outout to x.dat.
    r=cal(s[0])*16+cal(s[1]);
    //print2(r);the binary code of r is "1111 1110"
    cout << r;//Then you can open the x.dat with any hex editor, you can see it is "0xFE" in binary
    freopen("CON","w",stdout); // back to normal
    cout << 1;// you can see '1' in the stdout.
}
于 2013-05-09T05:05:25.643 に答える