用十六进制和十进制C打印无符号short int

lpares12

我一直在尝试unsigned short int用C来打印值,但是没有运气。据我所知,它是一个16位的值,所以我尝试了几种不同的方法来一起打印这2个字节,但是我只能在逐个字节地打印时正确地打印它。

请注意,我想在这两个十进制和十六进制格式打印此16位,例如00 01作为1,另一个例子是:00 ff作为255

我有这个结构:

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]; */ 
};

而这个功能:

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函数向我返回此信息:

格式硬件:0100

格式原型:0008

硬件镜头:6

原型镜头:4

命令:0100

该结构的十六进制值是“ 00 01 08 00 06 04 00 01”,所以我不知道为什么它在arp_hdr.ar_hrd值中返回0100。

另外,我做了一个函数,以十六进制打印结构,以确保我做得正确,并且能够检查所有字段的正确分配。

PS:在发送此问题之前,我意识到它正在打印正确的十六进制值,但无序。可能与小/大尾数的“差异”有关吗?

用户名

可能与小/大尾数的“差异”有关吗?

是的。如果您正在处理通过网络到达的数据包-并且正在打印ARP数据包的字段,那么这正是您在做的-您可能需要从字段的字节顺序开始转换通过网络发送到您正在运行的计算机上的字节顺序。

例如:

printf("Format HW: %04x\n", ntohs(arp_hdr.ar_hrd));

在这种特殊情况下,您可以不用ntohs()大端机(SPARC,System / 3x0,z / Architecture,运行AIX的PowerPC / Power ISA,运行Mac OS X的PowerPC / Power ISA 可能是PowerPC / Power ISA)呼叫就可以摆脱困境运行Linux等),但如果没有它,就不能在低端字节序的机器上运行(装有x86处理器的任何产品,包括x86-64处理器,可能是大多数ARM等)。

您可以在两种类型的处理器上使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Java中将64位无符号int(以十六进制字符串形式)转换为十进制

来自分类Dev

是否可以在intellij中同时将int视为十进制和十六进制?

来自分类Dev

我可以在C ++中将指针地址(即十六进制整数)转换为十进制和八进制基数int

来自分类Dev

如何根据数字格式将十进制和十六进制字符串解析为int

来自分类Dev

从64位十六进制地址中提取位到C中的无符号int

来自分类Dev

无符号char十六进制到int dec转换C ++

来自分类Dev

为什么我可以用十六进制而不是十进制表示一个大于 MAXINT 的 int?

来自分类Dev

从char转换为int并打印十进制值

来自分类Dev

c语言用int数据类型初始化十六进制数组

来自分类Dev

将十六进制字符串转换为无符号十进制值

来自分类Dev

在C ++中将N位int表示为十六进制

来自分类Dev

在目标C中将十六进制NSData转换为int

来自分类Dev

以十六进制值表示的int枚举

来自分类Dev

十六进制char到int转换

来自分类Dev

十六进制* char int number

来自分类Dev

以十六进制值表示的int枚举

来自分类Dev

十六进制到有符号十进制

来自分类Dev

Java:将带符号的Int_32(十六进制)转换为Int

来自分类Dev

用十六进制/十进制数进行计算

来自分类Dev

C中的二进制到十进制和十六进制

来自分类Dev

以十进制和浮点格式打印十六进制值

来自分类Dev

!objsize的差异(十六进制和十进制)

来自分类Dev

十进制和十六进制按位与

来自分类Dev

将Str(十六进制int)转换为Dec Int

来自分类Dev

C ++ std :: hex是否反转字节顺序?(将十进制打印为十六进制)

来自分类Dev

C++ 十六进制转十进制

来自分类Dev

将字节数组(十六进制)转换为有符号的Int

来自分类Dev

将11位十六进制值转换为有符号的32位int

来自分类Dev

将带符号的Int转换为带空格的十六进制字符串

Related 相关文章

  1. 1

    在Java中将64位无符号int(以十六进制字符串形式)转换为十进制

  2. 2

    是否可以在intellij中同时将int视为十进制和十六进制?

  3. 3

    我可以在C ++中将指针地址(即十六进制整数)转换为十进制和八进制基数int

  4. 4

    如何根据数字格式将十进制和十六进制字符串解析为int

  5. 5

    从64位十六进制地址中提取位到C中的无符号int

  6. 6

    无符号char十六进制到int dec转换C ++

  7. 7

    为什么我可以用十六进制而不是十进制表示一个大于 MAXINT 的 int?

  8. 8

    从char转换为int并打印十进制值

  9. 9

    c语言用int数据类型初始化十六进制数组

  10. 10

    将十六进制字符串转换为无符号十进制值

  11. 11

    在C ++中将N位int表示为十六进制

  12. 12

    在目标C中将十六进制NSData转换为int

  13. 13

    以十六进制值表示的int枚举

  14. 14

    十六进制char到int转换

  15. 15

    十六进制* char int number

  16. 16

    以十六进制值表示的int枚举

  17. 17

    十六进制到有符号十进制

  18. 18

    Java:将带符号的Int_32(十六进制)转换为Int

  19. 19

    用十六进制/十进制数进行计算

  20. 20

    C中的二进制到十进制和十六进制

  21. 21

    以十进制和浮点格式打印十六进制值

  22. 22

    !objsize的差异(十六进制和十进制)

  23. 23

    十进制和十六进制按位与

  24. 24

    将Str(十六进制int)转换为Dec Int

  25. 25

    C ++ std :: hex是否反转字节顺序?(将十进制打印为十六进制)

  26. 26

    C++ 十六进制转十进制

  27. 27

    将字节数组(十六进制)转换为有符号的Int

  28. 28

    将11位十六进制值转换为有符号的32位int

  29. 29

    将带符号的Int转换为带空格的十六进制字符串

热门标签

归档