gpt4 book ai didi

c++ - 需要将字符串更改为二进制,然后再更改为 ASCII

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:54:37 25 4
gpt4 key购买 nike

我有一些来自传感器的数据。数据在 signed int 范围内,16 位左右。我需要通过蓝牙发送数据。

问题:

假设数据是 -1564。蓝牙传输 -、1、5、6,然后是 4。这是低效的。我可以稍后在PC上处理数据,我只需要频率上去。

我的想法/解决方案:

将其转换为二进制,然后转换为 ASCII 以进行输出。我可以稍后在处理中转换 ASCII。我在这里有二进制部分(在 StackOverflow 上找到):

inline void printbincharpad(char c)
{
for (int i = 7; i >= 0; --i)
{
putchar( (c & (1 << i)) ? '1' : '0' );
}
}

这很好地以二进制形式输出。但是让蓝牙传输,比如 24,吐出 1、1、0、0,然后是 0。事实上,比 2、然后是 4 慢。

假设我有 65062,要传输 5 个字节,来自传感器。即二进制 1111111000100110,16 字节。对于 ASCII,它是 �&(是的,我知道这里的字符集很小,但它是独一无二的)只有 2 个字节!在十六进制中,它是 FE26,4 个字节。与十进制相比节省 3,与二进制相比节省 14,与十六进制相比节省 2。好吧,显然,我想在这里发送 ASCII。

我的问题:

那么,如果给定二进制输入,我该如何转换为 ASCII?我想发送 ASCII

对冲:

是的,我用 MatLab 编写代码的次数多于 C++。这是一个微 Controller 。 BAUD是115200。不是,我不知道上面的代码是怎么工作的,我不知道在哪里可以找到putchar的文档。如果您知道我需要运行它的库,请告诉我,因为我不知道。

感谢您提供的所有帮助或建议,我非常感激。

编辑:回应一些评论:我正在读取的是两个 16 位寄存器,因此数据丢失是不可能的。

最佳答案

putchar写入 standard output ,通常是控制台。

您可以查看 cstdio (or stdio.h) 中的其他输出函数图书馆。

无论如何,使用 putchar(),这是实现您所要求的一种方法:

void print_bytes (int n)
{
char *p = (char *) &n ;
for (size_t i = 0; i < sizeof (n); ++i) {
putchar (p [i]) ;
}
}

如果你确定你只需要整数的 16 位,你可以像这样简化它:

void print_bytes (int n)
{
char b = n & 0xff ;
char a = (n >> 8) & 0xff ;

putchar (a) ;
putchar (b) ;
}

关于c++ - 需要将字符串更改为二进制,然后再更改为 ASCII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21840450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com