unsigned short int
の値をCで表示しようとしましたが、運が悪いです。私が知る限り、これは16ビットの値なので、この2バイトを一緒に印刷する方法をいくつか試しましたが、バイトごとに正しく印刷することができました。 Iは10進数と16進数の形式の両方で、この16ビットを印刷したい符号なしの短い整数を16進数で表示します。C
注、1
例として00 01
ために、別の例では、次のようになります255
として00 ff
。
私はこの構造体を持っている:
struct arphdr {
unsigned short int ar_hrd;
unsigned short int ar_pro;
unsigned char ar_hln;
unsigned char ar_pln;
unsigned short int ar_op;
// I'm commenting the following part because I won't need it now
// for the explanation
/* unsigned char __ar_sha[ETH_ALEN];
unsigned char __ar_sip[4];
unsigned char __ar_tha[ETH_ALEN];
unsigned char __ar_tip[4]; */
};
そして、この機能:
フォーマットHW:0100
フォーマットプロト
void print_ARP_msg(struct arphdr arp_hdr) { // I need to print the arp_hdr.ar_hrd in both decimal and hex. printf("Format HW: %04x\n", arp_hdr.ar_hrd); printf("Format Proto: %04x\n", arp_hdr.ar_pro); printf("HW Len: %x\n", arp_hdr.ar_hln); printf("Proto Len: %x\n", arp_hdr.ar_pln); printf("Command: %04x\n", arp_hdr.ar_op); }
print_ARP_msg機能は、この私を返します。 :0008
HWレン:6
プロトレン:4
コマンド:0100
構造体の六角値は "00 01 08 00 06 04 00 01" であるので、Iドンなぜそれがarp_hdr.ar_hrd値に0100を返すのか分かりません。
また、構造体を16進数で表示して、正しく処理していることを確認し、すべてのフィールドが正しく割り当てられていることを確認できました。
PS:この質問を送信する前に、正しいHex値を印刷していても乱れていることがわかりました。小さな/大きなエンディアンの「相違」に関連していますか?
私はあなたが何を計算しているのか分かりませんが、 '0x00ff'は' 16'ではありません。 – EOF
はい、申し訳ありませんが、コピーして貼り付けていたため、数字が乱れました。既に編集済みです。 – lpares12