新しく質問する

2の補数計算でのsprintf関数の使い方で

役に立った:1件
  • 質問者:techhouse
  • 投稿日時:2011/11/08 14:41
  • 困り度:すぐに回答が欲しいです
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

現在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桁の文字だけを文字列につけるようにしたいのですが、どうしたらよいでしょうか?

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:1件)
  • 参考になった:0件

No.2ベストアンサー20pt

  • 回答者:Tacosan
  • 回答日時:2011/11/08 17:03

「必要なところ」のみが取り出せるよう, 適切な演算をしてください.

通報する

この回答へのお礼

回答頂きありがとうございます。

iHosu = ~iTotal; // 1の補数
iHosu++; // +1
iHosu = iHosu & 0x00FF;
sprintf( cAns, "%s%02X%c", cOrg, iHosu, 0x22 );
printf( "%s\n", cAns ); //文字列結果」

このようにすることでできるようになりました。助かりました。

  • 参考になった:0件
  • 回答者:chie65535
  • 回答日時:2011/11/08 15:09

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以外の文字列を消したいと考えています。

  
このQ&Aは役に立ちましたか?(役に立った:1件)

このページのトップへ

Facebook公式ページ

公式Twitter