C++ 转换长整型>;255到uint8_t数组中
我正在使用粒子光子微控制器,需要通过TCP发送值>>255。我需要将其转换为uint8_t数组,以便使用C++ 转换长整型>;255到uint8_t数组中,c++,uint8t,C++,Uint8t,我正在使用粒子光子微控制器,需要通过TCP发送值>>255。我需要将其转换为uint8_t数组,以便使用client.write((int8_t*data),intsizeof(packet)) 如何实现它?如果可能,为您的数据选择一个一致的“endian”——“big endian”是二进制网络协议的典型代表——它用于IP、UDP、TCP等中的头字段 因此,您可以使用htonX系列函数将数据从主机格式(可能是哪种endian格式)转换为网络格式,然后在收到数据后再将其转换回网络格式,例如: u
client.write((int8_t*data),intsizeof(packet))代码>
如何实现它?如果可能,为您的数据选择一个一致的“endian”——“big endian”是二进制网络协议的典型代表——它用于IP、UDP、TCP等中的头字段
因此,您可以使用htonX
系列函数将数据从主机格式(可能是哪种endian格式)转换为网络格式,然后在收到数据后再将其转换回网络格式,例如:
uint32_t netword = htonl(data);
[在big-endian系统上,这些函数成为“无操作”]
编辑哦-我错过了“微控制器”的部分-可能你没有这些功能:(使用了ScruffR在帖子上说的内容
编辑
以前的版本实际上没有正确地完成这项工作。
通过的解决方案,没有人(尽管投了反对票)提供
您可以将其分配给数组中的下一个int8\t
,然后右移直到达到零。这是最简单的解决方案,但它会将最低有效位放在第一位。您有证据表明在大系统上这些函数会变成无运算吗?因为我看不到任何运算。@Seb我不知道一个好的编译器是否可以完全运算对它们进行计时,但在大端系统上,即标识函数。这个答案是错误的,因为您混淆了“主机字节顺序”和“主机(无论是哪种端格式)”。您认为htonl的“h”部分是不同的。它不是。主机字节顺序始终是小端。所以当您编写htonl(x)时
你是说x
是主机字节顺序,你希望它转换成网络字节顺序。它是否已经是网络字节顺序并不重要,因为你告诉它是主机字节顺序,你希望它被交换。@Seb你完全错了-在大多数现代系统上,主机顺序是little endian,但它远不是guaranteed.FWIW,网络协议是我的专长-在处理IETF二进制协议时,在向导线写入数据时,应始终使用htonX
,在从导线读取数据时,应始终使用ntohX
。
char buf[SIZEBUFF];
sprintf(buf,"%s",float2send);
sprintf(buf,"%ld",longInt2send);