私はCでwiritngしていて、整数の変換に問題があります。
私がやりたいことは次のとおりです。
チェックサムという整数があります。
この整数を16進形式に変換してから、最後の2桁だけを取り、それらをdez形式の整数に変換し直したいと思います。
例:
チェックサム=-864
16進数では、これは次のようになります。FFFFFFFFFFFFFCA0
最後の2桁は次のとおりです。A0
また、dez形式の「A0」は160です。
Cでこれを行うにはどうすればよいですか?
char m_c_end_dec = (char)checksum & 0xff;
int m_end_dec = (int)m_c_end_dec;
charは1ビットしかないため、単純なキャストでは最後のビットを取得し、それをintに再キャストして、A0を160にします。
これが(中間の)16進表現とどのように関係しているかはわかりません(また、なぜそれについて怒鳴る必要があるのかわかりません)。チェックサムの最後のバイトを取得し、適切なフォーマット文字列を使用して印刷します。
printf("checksum is %d\n", checksum & 0xff);
または文字列形式を使用します。例えば
printf( "%02x"、チェックサム)
または大文字のprintf( "%02X"、チェックサム)
結果として文字列を受け入れる場合、 16 進数への変換は再帰的に実現できます。この文字列から、最後の 2 桁を簡単に切り取り (google/SO をチェック)、元に戻すことができます。