二进制转换成十六进制数据到对应的ASCII码,并存储在字符串 [英] Convert binary hex data to ASCII equivalent and store in String

查看:239
本文介绍了二进制转换成十六进制数据到对应的ASCII码,并存储在字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Arduino的使用C ++。

I am using C++ on Arduino.

假如我有二进制数据流;

Suppose I have a stream of binary data;

二进制数据: 0xFF的,0×00,0×01,的0xCC

我想它转换成等价的ASCII码,并将其存储在一个String对象类型。

I want to convert it to the ASCII equivalent and store it in a String object type.

转换后的字符串应该是这样的FF0001CC。

The converted string should look like this "FF0001CC".

下面是一些$草案C $ C。

Here are some draft code.

char buffer[100];
String myString;

for (int i=0; i < numBytes; i++)
{
    //assume buffer contains some binary data at this point 
    myString += String(buffer[i], HEX);
}

本code的问题是,的myString 包含 FF01CC ,而不是 FF0001CC

推荐答案

我的猜测是String类的每个文本被追加的时候,可以改进调整大小。
假设你知道的输入大小和不断汇入作业,你可以试试这个:

My guess would be that the String class resizes each time a text is appended, that could be improved. Assuming you know the input size and it´s constant, you could try this:

char outbuffer[numBytes*2+1];   
const char* pHexTable="0123456789ABCDEF";
int iPos=0;

for(int i=0; i<numBytes; i++){
    //assume buffer contains some binary data at this point
    const char cHex=buffer[i];
    outbuffer[iPos++]=pHexTable[(cHex>>4)&0x0f];
    outbuffer[iPos++]=pHexTable[cHex&0x0f];
}
outbuffer[iPos]='\0';

这篇关于二进制转换成十六进制数据到对应的ASCII码,并存储在字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆