C 使用NTOH的无符号整数
我正在从DNS服务器获取一些数据,并试图将某个部分转换为无符号int(表示刷新间隔、过期时间等)。所谓转换,我指的是从大端到小端。问题是,NTOH只放置2个字节的数据,而不是4个字节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
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
的内容是一个很好的参考。