1

unsigned char* を印刷可能な16進文字列に変換する方法を学ぶために、私はたくさんグーグルで検索しました。これまでのところ、すべてがどのように機能するか、および符号付き文字と符号なし文字の違いを少し理解しています。

私が見つけたこの関数が何をするのか教えてもらえますか? unsigned char* (ハッシュされた文字列) を印刷可能な文字列に変換する関数を開発するのを手伝ってくれませんか?

次の関数はこれを行いますか:
- char 配列 string の 1 文字おきに反復します
- 各ループで、位置 string[x] で char を読み取り、それを符号なし数値 (小数点以下 2 桁の精度) に変換します次に、変換された char(number?) を変数 uChar にコピーします。
- 最後に、unsigned char uChar を 16 進文字列に格納します

void AppManager :: stringToHex( unsigned char* hexString, char* string, int stringLength ) 
{     
    // Post:

    unsigned char uChar = 0;           

    for ( int x = 0; x<stringLength; x+=2 )     
    {         
        sscanf_s(&string[x], "%02x", &uChar);         
        hexString[x] = uChar;     
    } 

} 

つまり、文字列内の文字を unsigned(& 2dcp) に変換して、正しく 16 進文字列に格納できるようにすることを意味すると思います。小数点以下 2 桁にすると、符号付き (その文字が符号付きの場合) から符号なしへの単純な変換で、まったく異なる文字列が得られるのはなぜですか?

unsigned char* がある場合、それを画面に出力できるように変換するにはどうすればよいですか?

4

1 に答える 1

2

それらは小数点以下の桁数ではなく、数字です。「2 桁未満の文字列を渡さないでください。2 桁未満の場合は、ゼロを埋めてください」と言っているのです。

これは、16 進シーケンスがある場合0x0A0AA.

また、ここでは符号付き/符号なしの変換はありません。16 進文字列は 16 進文字列です。記号はありません。それらはデータのバイナリ表現であり、解釈方法に応じて、2 の補数の符号付き整数、符号なし整数、文字列、またはその他として読み取られる場合があります。

于 2011-10-03T01:34:58.820 に答える