将 uint16_t 转换为 char[2] 以通过套接字发送 (unix)

标签 c sockets unix tcp stream

我知道大致上有一些东西..但我的大脑受伤了,我找不到任何东西来做这件事......

我正在尝试通过 unix 套接字发送一个 16 位无符号整数。为此,我需要将 uint16_t 转换为两个字符,然后我需要在连接的另一端读取它们并将其转换回来转换为 unsigned int 或 uint16_t,此时它使用 2bytes 还是 4bytes 并不重要(我运行的是 64 位,这就是为什么我不能使用 unsigned int :)

顺便说一句,我在 C 中这样做

谢谢

最佳答案

为什么不使用掩码和移位将其分解成字节?

 uint16_t value = 12345;
 char lo = value & 0xFF;
 char hi = value >> 8;

(编辑)

在另一端,你用相反的方式组装:

 uint16_t value = lo | uint16_t(hi) << 8;

在我的脑海中,不确定是否需要强制转换。

关于将 uint16_t 转换为 char[2] 以通过套接字发送 (unix),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279024/

相关文章:

c++ - 转发声明一个外部结构

c - 如何计算 OS X 上 Go 程序中的系统调用?

c++ - 在同一个套接字上多次写入 C++

java - Spring会自动关闭TCP入站网关吗?

bash - 如果 ( ) </开发/空

c - drand48 返回全 0? (C)

c - 链接列表在一台计算机上打印,但不在另一台计算机上打印

python - Django Channels No module named 'asgiref.sync' 错误

unix - 使用 awk 对齐字段分隔符为 '|' 或管道的各个字段

macos - 如何在 Mac/UNIX Shell 脚本的 osascript 提示对话框中隐藏密码