【发布时间】:2015-08-24 16:56:10
【问题描述】:
我的结构如下
struct msg {
uint16_t data1;
int data2;
}
我是把结构体数据转换成字符串(char buffer)后通过串口发送的。
我其实是在使用memcpy将内容复制到缓冲区中(使用PRAGMA进行结构打包)
我面临的问题是我的板子的 puts 功能,一旦遇到 NULL 字符就会停止(即如果 1 bye 为 0,则 ASCII 等效 o decimal 0 为 NULL)
如果 data2 = 12 那么 memcpy 之后的内存将为 00 00 00 0C (HEX)。一个 puts 看到它停止并返回的第一个 00。
我无法更改我的串行端口设置或 puts 功能。 将 int 转换为 char 缓冲区中的 4 字节而不任何字节为 0 的最佳方法是什么
【问题讨论】:
-
您有三个选择。第一种是停止发送二进制数据,而是发送一个 ASCII 格式的数字。第二种是使用为二进制数据设计的函数,而不是
puts。第三个是使用Base64之类的东西对整个字符串进行编码。 -
您应该搜索“序列化”或“编组”。无论如何,您不应该只发送
struct的二进制图像。 -
"什么是在 char 缓冲区中将 int 转换为 4 字节而不任何字节为 0 的最佳方法" 那么使用转换为字符串。
-
你确定访问串口的唯一方法是通过
stdout吗? -
Pidgeonhole 原则说你输了。