sprintf で、桁数設定が出来ない

CS+で16進8桁で表示するために次のように書きました。
sprintf (Str, "DEF = %08X\r\n" ,1023)
しかし、次のように表示されます。
DEF = %8X

期待するのは、DEF = 000003FF です。

オーとゼロを間違えたかと思い確認しました。

sprintf (Str, "DEF = %8X\r\n" ,1023) とすれば

DEF = %8X と表示されます。

sprintf (Str, "DEF = %X\r\n" ,1023) と書けば、
DEF = 3FF と表示されます。

使い方が間違えていますか?

Parents
  • わわいさん、リカルドです。

    >sprintfなどに関しては環境ごとの挙動の違いが大きすぎるため、ウチの開発では、これらの標準関数に関しては使用禁止としています

    もしかしたら、ルネサスのバグかも知れませんね。あまり使われないので、表面化しないのかも知れませんね。

    秋月電子でLCD表示器を売っています。H8/3052のキットに付属している5V使用のLCDは問題無く動きました。
    RX621キットに付属している3V仕様のLCDにはバグが有りました。
    LCDのコマンドを全て試したら、上手く動かないコマンドが有りました。
    秋月電子に調査して貰ったところ、製品のバグでした。
    何年も経っているので去年だったか秋月電子に訊いたところ、改善されていないとの回答でした。
    そのコマンドは、ユーザーオリジナルのキャラクタを作るコマンドだったと思います。
    あまり使われなくて表面化しないのでしょう。

  • わわいです

    メンテからこっち、なんかいろいろかわってるようですねー
    ってことでここにぶら下げますが。。

    とそれはさておき、Hex変換ごとき、サクッと自分で実装してしまえばいいんでは。

    sprintfにこだわって無駄に時間をかけても何にもならないと思いますよ

Reply
  • わわいです

    メンテからこっち、なんかいろいろかわってるようですねー
    ってことでここにぶら下げますが。。

    とそれはさておき、Hex変換ごとき、サクッと自分で実装してしまえばいいんでは。

    sprintfにこだわって無駄に時間をかけても何にもならないと思いますよ

Children
  • わわいさん、リカルドです。

    >メンテからこっち、なんかいろいろかわってるようですねー

     書き込みが有るとメールで知らせが来ていたのですが、わわいさんの書き込みに対して知らせが有りませんでした。
     sprintf の件に関して、最後の書き込みがわわいさんだったので気付きました。

    >sprintfにこだわって無駄に時間をかけても何にもならないと思いますよ

    sprintf の機能を調べるのが目的です。

    while(1){} が、どの様にマシン語になるのか調べた事が有ります。
    単純にジャンプ命令のなるのかと思ったら、そうでは無かった。
    1と0との比較命令が入っていました。
    1をレジスタにロードしただけで、ゼロフラグが変化する筈だけど。