2の補数計算でのsprintf関数の使い方で
現在Microsoft Visual C++ 2010 Expressでプログラミングの勉強中なのですが、
2の補数計算で
”100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF”
この数値の加算後の2の補数を行った際に
最終的にiToal = 3756
となり、最後に次のプログラムを実行しました。
iHosu = ~iTotal; // 1の補数
iHosu++; // +1
sprintf( cAns, "%s%02X%c", cOrg, iHosu, 0x22 );
最終的には結果が
”100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF54”
と出てほしいのですが、
”100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF154”
とでます。
iHosuの下2桁の文字だけを文字列につけるようにしたいのですが、どうしたらよいでしょうか?
回答(2件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.2ベストアンサー20pt
「必要なところ」のみが取り出せるよう, 適切な演算をしてください.
この回答へのお礼
回答頂きありがとうございます。
iHosu = ~iTotal; // 1の補数
iHosu++; // +1
iHosu = iHosu & 0x00FF;
sprintf( cAns, "%s%02X%c", cOrg, iHosu, 0x22 );
printf( "%s\n", cAns ); //文字列結果」
このようにすることでできるようになりました。助かりました。
iHosu = ~iTotal; // 1の補数
iHosu++; // +1
iHosu &= 0xff;
sprintf( cAns, "%s%02X%c", cOrg, iHosu, 0x22 );
>と出てほしいのですが、
>”100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF154”
>とでます。
注意力が不足している。
”100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF154”
ではなくて
”100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF154”
が出ている筈だ。「F」の個数を良く数えてみなさい。
この回答へのお礼
回答頂きありがとうございます。現在私はATmega88というマイコンのプログラミングなどをしているのですが、このマイコンのEEPROMメモリーの内容を書き換える際にテキストファイル化されたインテルHEXというテキストを扱うときがあり、データの編集をテキストエディタで行う際に2の補数計算が必要になります。
int型が32ビットなので、FFFFF154が後ろに付くと思うのですが、インテルHEXファイルのフォーマットなのでしょうがこの中の54の部分のみが必要になるようです。
なるべくなら、54以外の文字列を消したいと考えています。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











