C++ 转换长整型>;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

我正在使用粒子光子微控制器,需要通过TCP发送值>>255。我需要将其转换为uint8_t数组,以便使用
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);