将数据从 int 复制到 2 个无符号字符

Posted

技术标签:

【中文标题】将数据从 int 复制到 2 个无符号字符【英文标题】:Copy data from int to 2 unsigned chars 【发布时间】:2013-01-14 14:40:29 【问题描述】:

如何将数据从 int (int port1 = 52010) 复制到一对无符号字符 (unsigned char port2[2]?我不知道如何处理除法。

【问题讨论】:

beej.us/guide/bgnet/output/html/multipage/htonsman.html 【参考方案1】:

您通常使用遮罩和移位。

const unsigned short port = 52010;
uint8_t port2[2];

大端:

port2[0] = port >> 8;
port2[1] = port & 255;

小端:

port2[0] = port & 255;
port2[1] = port >> 8;

对于 IP 网络中使用的端口号之类的东西,您通常总是使用所谓的“网络字节顺序”(也称为“大端”),并且有一个特殊的宏可以做到这一点:

const unsigned short port_n = ntohs(port);

请注意,这会将端口号保留为 unsigned short,同时在必要时交换字节。

【讨论】:

【参考方案2】:
    port2[0] = port1 >> 8;
    port2[1] = port1 & 0x00FF;

或根据字节顺序倒序

【讨论】:

嗯,完全正确@unwind,已修复。

以上是关于将数据从 int 复制到 2 个无符号字符的主要内容,如果未能解决你的问题,请参考以下文章

复制无符号字符数组

如何将多个零作为字符串输入到int? [复制]

如何在Matlab中将数据从一个文本文件复制到另一个文本文件

编辑存储在字节数组中的数据

如何将特定输出从命令提示符复制到文件?

在 C++ 中将最低有效位从 int 复制到 long