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

时间:2014-02-17 22:21:04

标签: c++ c bluetooth binary ascii

我有一些来自传感器的数据。数据在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,它是 &amp; (是的,这里的字符集很小,我知道,但它是唯一的)只有2个字节!在HEX中它是FE26,4个字节。节省3比十进制,14对二进制,2对十六进制。好吧,显然,我想要在这里发送ASCII。

我的问题:

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

对冲:

是的,我在MatLab中的编码比C ++更多。这是针对微控制器的。 BAUD是115200.不,我不知道上面的代码是如何工作的,我不知道putchar的文档在哪里找到。如果你知道我需要运行这个库,请告诉我,因为我不知道。

感谢您提供任何帮助或建议,我很感激。

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

2 个答案:

答案 0 :(得分:0)

当您说ASCII时,您的意思是Base 256.您可以搜索从Base 10转换为Base 256的解决方案。

这是一个C程序,它将包含65062(5个字符)的字符串转换为2个字符的字符串:

#include <stdio.h>
#include <stdlib.h>

int main() 
{
    char* inputString="65062";
    int input;
    char* tmpString;
    char* outString;
    int Counter;

    input = atoi(inputString);
    outString= malloc (sizeof(input) + 1);
    tmpString = &input;

    for (Counter=0; Counter < sizeof(input) ; Counter++) {
        outString[Counter] = tmpString[Counter];
    }

    outString[sizeof(input)] = '\0';

    printf ("outString = %s\n", outString);

    free(outString);
}

答案 1 :(得分:0)

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) ;
}