私はCクラスのコードのこの部分を持っています:
int i;
for (i=0;i<val;i++)
mdl_print ("%u ", rec->payload[i]);
mdl_print ("\n");
変数 rec->payload は uint8_t 型です。私はそれを16進数表記で印刷します。
どのようにできるのか?ありがとう。
早くて簡単:
print("%x", (int)(rec->payload[i]));
0x05 の形式で表示するには、次を使用します。
print("0x%02x", ...)
代わりは。
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 ) を参照してください。
「%x」を使用するので、次のようにします。
mdl_print ("%x ", rec->payload[i]);
これにより、「必要な長さ」である16進数が得られます。固定長が必要な場合は、ゼロで埋められた 2 桁に「%02x」を使用します。
n1570.pdf のセクション 7.21.6.1p9 で述べられているように、printf でauint8_t
またはint
anが予期される場所での提供は未定義の動作であることに注意してください。unsigned int
7.21.6.1p8 によると、%x
printf に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;
}
まず、タイトルが間違っています...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