バイナリから (印刷可能な) ヘキサへの変換で問題が発生しました。コードを書くための(私のシステムにとって)機能的な方法に達しましたが、それがすべてのシステム(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が必要な理由がわかりませんでした...
符号拡張のことをよく理解していなかったので、少なくとも私が書いたコードがすべてのシステムで動作するかどうか教えていただけますか?