gpt4 book ai didi

c - 编码解码字节

转载 作者:太空狗 更新时间:2023-10-29 15:29:42 24 4
gpt4 key购买 nike

我有一个嵌入式设备以这种格式向我发送 UTC 日期(日期是 4 个字节):

 buffer.push_back((BYTE)(time_utc & 0x000000FF));
buffer.push_back((BYTE)((time_utc & 0x0000FF00) >> 8));
buffer.push_back((BYTE)((time_utc & 0x00FF0000) >> 16));
buffer.push_back((BYTE)((time_utc & 0xFF000000) >> 24));

在服务器上,我接收字节并将它们存储在 socket_buf 中,从索引 0-3 开始并使用以下逻辑对其进行解码

mypkt.dateTime = ( ( socket_buf[0] << 24) +  
(socket_buf[1 ] << 16) + socket_buf[2] << 8) +
(socket_buf[3] << 0));

但我不确定是否正确解码,因为我得到的日期不正确。谁能建议我正确的解码方法?我正在使用 Linux 命令解码日期(16711840 是我通过解码得到的数字):

#date -d @16711840

最佳答案

写入代码是小端 - 它首先发送最低有效字节。

您的阅读代码期待大端 - 它获取第零字节并将其左移 24 位。

请注意,在这两种情况下,代码都不依赖于本地机器的字节顺序 - 编写的代码与其无关,只是它们彼此不一致。

试试这个,而不是:

mypkt.dateTime = ((socket_buf[0] <<  0) +
(socket_buf[1] << 8) +
(socket_buf[2] << 16) +
((uint32_t)socket_buf[3] << 24));

转换是必要的(但仅在最后一个类次)因为 0x80 - 0xff 将被转换为 signed int 并且它是未定义的移入符号位的位会发生什么(感谢@Lundin)

注意:16711840 不是“当前”Unix 纪元日期时间值,无论您使用哪种字节序来表示它。您可能在其他地方有其他问题。

关于c - 编码解码字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16833908/

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