2

バイナリから (印刷可能な) ヘキサへの変換で問題が発生しました。コードを書くための(私のシステムにとって)機能的な方法に達しましたが、それがすべてのシステム(OSとハードウェア)で移植可能かどうかを知る必要があります。

これが私の関数です(バイナリテキストからUUIDを構築しようとしています):

int extractInfo( unsigned char * text )
{
    char h[3];
    int i;

    this->str.append( "urn:uuid:" );
    for( i = 56; i < 72; i++ )
    {
        ret = snprintf( h, 3, "%02x", text[i] );
        if( ret != 2 )
            return 1;
        this->str.append( h );
        if( i == 59 || i == 61 || i == 63 || i == 65 )
            this->str.append( "-" );
    }

    return 0;
}

unsigned charの代わりにcharを使用すると、符号拡張のために値がうまく出力されないことを理解しました(C++はバイナリファイルを読み取り、hexに変換します)。それぞれ承認および変更されました。

しかし、私はこれを行うより多くの変種に遭遇しました: Conversion from binary file to hex in C、そして私は本当に迷っています。アンワインドのコードでは:

sprintf(hex, "%02x", (unsigned int) buffer[0] & 0xff);

配列が unsigned char であるにもかかわらず (質問をした人によって元の投稿コードで定義されているように)、unsigned intへのキャストが必要であり、変換するバイトのビットごとの ANDが必要な理由がわかりませんでした...

符号拡張のことをよく理解していなかったので、少なくとも私が書いたコードがすべてのシステムで動作するかどうか教えていただけますか?

4

1 に答える 1