gpt4 book ai didi

c - 使用 ntohs 的无符号整数

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:10 24 4
gpt4 key购买 nike

我正在从 DNS 服务器获取一些数据,我正在尝试将某个部分转换为无符号整数(代表刷新间隔、到期时间等)。通过转换,我的意思是从大端到小端。问题是 ntohs 只放置了 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 到一个无符号整数?

最佳答案

注意 780b0b78 的字节交换,也就是你传入的数字的低 16 位。

ntohs 中的sshort。它对 uint16_t 数量进行操作。 ntohs 的参数和返回类型是 unsigned int 只是因为它早于 C89 原型(prototype);在 K&R C 中,不可能表达一个函数采用比 int 更短的参数。 (最新的 POSIX 规范 seems to have decided that this historical wart is no longer necessary。我可以说服 GCC 和 clang 警告这个错误,但只能使用 -Wconversion 没有打开它>-Wall-Wextra,也不是-pedantic。)

您要找的函数是ntohl .它对 uint32_t 数量进行操作,这正是您想要的。 (l 代表 long,但它可以追溯到闻所未闻的 64 位 long 时代。)

关于c - 使用 ntohs 的无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23685146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com