- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一些来自传感器的数据。数据在 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/
我有本地更改和远程更改。 有人告诉我必须先推,再 pull 。这背后有什么原因吗? 最佳答案 那个人错了:正确的模型是pull-before-you-push,而不是相反。 当您pull时,git 将
我正在使用最新版本的 Flat UI Pro 1.3.2 ( http://designmodo.com/flat/ ),jQuery 插件 flatui-radiocheck v0.1.0 和 iO
我是一名优秀的程序员,十分优秀!