C 使用NTOH的无符号整数

C 使用NTOH的无符号整数,c,dns,protocols,endianness,C,Dns,Protocols,Endianness,我正在从DNS服务器获取一些数据,并试图将某个部分转换为无符号int(表示刷新间隔、过期时间等)。所谓转换,我指的是从大端到小端。问题是,NTOH只放置2个字节的数据,而不是4个字节 memcpy(&number, data, 4); printf("%x ",number); number = ntohs(number); printf("%x ",number); Output: b6fc0b78 780b 关于类型: :t data char* :t number unsign

我正在从DNS服务器获取一些数据,并试图将某个部分转换为无符号int(表示刷新间隔、过期时间等)。所谓转换,我指的是从大端到小端。问题是,NTOH只放置2个字节的数据,而不是4个字节

memcpy(&number, data, 4);
printf("%x ",number);
number = ntohs(number);
printf("%x ",number);

Output:
b6fc0b78 780b
关于类型:

:t data
char*
:t number
unsigned int
奇怪的是,即使尝试使用位移位来重建数字,其值也非常不同:例如0


如何将b6fc0b78中的780bfcb6转换成无符号整数?

请注意,
780b
0b78
的字节交换,它是您传入的数字的低16位

ntohs
中的
s
用于
short
。它对
uint16\t
数量进行操作。
ntohs
的参数和返回类型是
unsigned int
,只是因为它早于C89原型;在K&R C中,不可能表示函数的参数小于
int
。(最新的POSIX规范。我可以说服GCC和clang警告这个错误,但只能使用
-Wconversion
,它不是由
-Wall
-Wextra
,也不是
-pedantic
打开的)


您正在寻找的功能是。它对
uint32\t
数量进行操作,这是您想要的。(
l
表示
long
,但它的出现时间是64位
long
闻所未闻的。)

请注意,
780b
0b78
的字节交换,它是您传入的数字的低16位

ntohs
中的
s
用于
short
。它对
uint16\t
数量进行操作。
ntohs
的参数和返回类型是
unsigned int
,只是因为它早于C89原型;在K&R C中,不可能表示函数的参数小于
int
。(最新的POSIX规范。我可以说服GCC和clang警告这个错误,但只能使用
-Wconversion
,它不是由
-Wall
-Wextra
,也不是
-pedantic
打开的)


您正在寻找的功能是。它对
uint32\t
数量进行操作,这是您想要的。(
l
表示
long
,但它的出现时间是64位
long
闻所未闻的。)

请注意,
780b
0b78
的字节交换,它是您传入的数字的低16位

ntohs
中的
s
用于
short
。它对
uint16\t
数量进行操作。
ntohs
的参数和返回类型是
unsigned int
,只是因为它早于C89原型;在K&R C中,不可能表示函数的参数小于
int
。(最新的POSIX规范。我可以说服GCC和clang警告这个错误,但只能使用
-Wconversion
,它不是由
-Wall
-Wextra
,也不是
-pedantic
打开的)


您正在寻找的功能是。它对
uint32\t
数量进行操作,这是您想要的。(
l
表示
long
,但它的出现时间是64位
long
闻所未闻的。)

请注意,
780b
0b78
的字节交换,它是您传入的数字的低16位

ntohs
中的
s
用于
short
。它对
uint16\t
数量进行操作。
ntohs
的参数和返回类型是
unsigned int
,只是因为它早于C89原型;在K&R C中,不可能表示函数的参数小于
int
。(最新的POSIX规范。我可以说服GCC和clang警告这个错误,但只能使用
-Wconversion
,它不是由
-Wall
-Wextra
,也不是
-pedantic
打开的)


您正在寻找的功能是。它对
uint32\t
数量进行操作,这是您想要的。(
l
代表
long
,但它可以追溯到64位
long
闻所未闻的时代。)

阅读文档可能会带来启示。我做到了。但在我收到的文档中,关于ntohs的唯一一点是,它用于从网络顺序转换为主机顺序。如果在类似UNIX的系统上,在终端窗口中键入类似
man ntohs
的内容是一个很好的参考。阅读文档可能会带来启示。我做到了这一点。但在我收到的文档中,关于ntohs的唯一一点是,它用于从网络顺序转换为主机顺序。如果在类似UNIX的系统上,在终端窗口中键入类似
man ntohs
的内容是一个很好的参考。阅读文档可能会带来启示。我做到了这一点。但在我收到的文档中,关于ntohs的唯一一点是,它用于从网络顺序转换为主机顺序。如果在类似UNIX的系统上,在终端窗口中键入类似
man ntohs
的内容是一个很好的参考。阅读文档可能会带来启示。我做到了这一点。但在我收到的文档中,关于ntohs的唯一一点是,它用于从网络顺序转换为主机顺序。如果在类似UNIX的系统上,在终端窗口中键入类似
man ntohs
的内容是一个很好的参考。