-1

私はCクラスのコードのこの部分を持っています:

int i;
    for (i=0;i<val;i++)
        mdl_print ("%u ", rec->payload[i]);
    mdl_print ("\n");

変数 rec->payload は uint8_t 型です。私はそれを16進数表記で印刷します。

どのようにできるのか?ありがとう。

4

5 に答える 5

2

早くて簡単:

print("%x", (int)(rec->payload[i]));

0x05 の形式で表示するには、次を使用します。

print("0x%02x", ...)

代わりは。

于 2013-03-11T11:33:17.637 に答える
2

mdl_print() が標準 C 関数の printf() のように機能する場合は、次のようなことを試してください。

printf( "%02x", (int) rec->payload[i] );

16 進数で書き込むための基本的な printf フォーマット コードは %x です。"02" は、2 文字幅になるまで数字を '0' で埋めることを意味します。これは、通常 int8 を出力する方法です。

多くのカスタム出力関数は、このように printf の形式に従います。これは、C プログラマーにとって非常になじみがあるためです。printf の詳細については、man ページ ( http://linux.die.net/man/3/printf ) を参照してください。

于 2013-03-11T11:33:36.717 に答える
1

「%x」を使用するので、次のようにします。

mdl_print ("%x ", rec->payload[i]);

これにより、「必要な長さ」である16進数が得られます。固定長が必要な場合は、ゼロで埋められた 2 桁に「%02x」を使用します。

于 2013-03-11T11:34:04.510 に答える
1

n1570.pdf のセクション 7.21.6.1p9 で述べられているように、printf でauint8_tまたはintanが予期される場所での提供は未定義の動作であることに注意してください。unsigned int7.21.6.1p8 によると、%xprintf にunsigned int. に明示的にキャストするuint8_tか、 にあるマクロを(unsigned int)使用してください。PRIx8<stdint.h>

#include <assert.h>
#include <stdint.h>
#include <stdio.h>

int main(void) {
    uint8_t foo = 42;
    /* These two printfs are equivalent: */
    printf("Hex for %02u: %02x\n", (unsigned int) foo, (unsigned int) foo);
    printf("Hex for %02" PRIu8 ": %02" PRIx8 "\n", foo, foo);
    return 0;
}
于 2013-03-11T12:15:27.287 に答える
-1

まず、タイトルが間違っています...Casting integer to hex in Cキャストは型の変更を意味します.16進数は型ではなく数値システムです. 「キャスト」ではなく「整数を16進数で表示」しています。違いが分からない場合は、補足をお願いします。

表示に関する限り、結果をどのように見せたいかによって異なります。私が通常使用する 1 つのショートカットは次のとおりです。

mdl_print("%#x ", rec->payload[i]);

値を次のように表示します。

0xA6

この構文の注意点は、0 では機能しないということ0x0です0。したがって、代替案は次のようになります。

mdl_print("0x%x ", rec->payload[i]);

どちらが値を表示する0xA6か、0x0または何でも表示します。もちろん、その0x部分が必要ない場合は、いつでも実行できます。

mdl_print("%x ", rec->payload[i]);

符号なし 8 ビット数の最大値 (16 進数) は、0xFFすべて同じ「幅」を表示する場合は、サイズ指定子も使用できます。

mdl_print("%02x ", rec->payload[i]); // or mdl_print("0x%02x, rec->payload[i]); 
                                     // or whatever you picked
于 2013-03-11T11:49:00.140 に答える