首页 > 解决方案 > 通过 fwrite stdout 的 Atmel 二进制数据防止在 0x0a 之前添加 0x0d

问题描述

我在通过 ATxMega128A1 发送二进制数据时遇到问题。如果可能的话,我想使用stdoutwithfwrite函数。但我无法将其设置为二进制模式,并且每个值为 0x0a 的值都会自动转换为 0x0d 0x0a ...

我非常沮丧,因为我找到的所有精彩解决方案(fopen(..., "wb")fdopen(dup(fileno(stdout)), "wb");此处输入链接描述freopen(NULL, "wb", stdout))都不适用于 avr-gnu-toolchain。

谁能帮我转移我的简单二进制数据数组?

uint8_t data[10];
data[0] = 1;
data[1] = 2;
data[2] = 3;
data[3] = 10;
....
data[8] = 3;
data[9] = 5;
fwrite(data, 10, 1, stdout);
// receiving of 10 bytes at receiver:
// 0x01 0x02 0x03 0x0d 0x0a ... 0x03

如您所见,写入串行端口的数据在 0x0a 之前附加了前导 0x0d,并且在读取 10 个字节时,接收器端缺少我的最后一个值。

不好的是,界面会自动更改数据。是否有合适的解决方案告诉stdout您进入“愚蠢”二进制模式并按原样传输数据?!

此致

我希望有一个好的解决方案

标签: cbinarystdoutstdioatmega

解决方案


推荐阅读