如何将二进制表示字节转储为十进制字符串?

时间:2010-11-09 02:07:26

标签: c++ c

下面的

是十六进制转储函数,但我需要的是dec dump。

void DumpBytes(unsigned char* inputBytes,int inputBytesLength,char* ouputString)
{
    unsigned char const Hex[] = "01234567890abcdef";
    for (int i = 0; i < inputBytesLength; i++)  
    {
        unsigned char binByte = inputBytes[i];
        ouputString[2*i] = (Hex[(binByte & 0xf0) >> 4]);
        ouputString[2*i + 1] = (Hex[binByte & 0x0f]);
    }
}

所以,如何将字节转储为十进制字符串而不是十六进制字符串。提前谢谢!

4 个答案:

答案 0 :(得分:1)

字节整齐地适合2个十六进制字符,但十进制最多可以占用3个字符(0 - 255),并且将它们存储在没有空格的字符串中并不是那么整洁。您可能只想直接用空格打印出来:

for (int i = 0; i < inputBytesLength; i++)  
  cout << (int)inputBytes[i] << ' ';

如果您确实希望将它们存储在字符串中,那么它绝对可能并且与现有代码非常相似:

ouputString[3*i] = '0' + binByte / 100;
ouputString[3*i + 1] = '0' + (binByte / 10) % 10;
ouputString[3*i + 2] = '0' + binByte % 10;

答案 1 :(得分:0)

而不是>> 4& 0x0f,请使用/ 10% 10两次。

答案 2 :(得分:0)

我认为您正在寻找Base64编码。

这种编码/解码算法被许多主要协议(如HTTP和IMAP(电子邮件协议))用于将二进制数据转换为更多,如何说,可转移。 它将获取您的数据并生成每个给定字节的两个字节的表示,因此,如果您有空间限制,请考虑这一点。

关于B64也有很好的答案,例如this

答案 3 :(得分:0)

void DumpBytes(unsigned char* inputBytes,int inputBytesLength,char* ouputString)
{
    for (int i = 0; i < inputBytesLength; i++)  
    {
      unsigned char binByte = inputBytes[i];
      ouputString[3*i + 2] = binByte % 10 +'0';
      binByte \= 10;
      ouputString[3*i + 1] = binByte % 10 +'0';
      binByte \= 10;
      ouputString[3*i] = binByte % 10 +'0';
    }
    ouputString[3*i] = 0;
}

输出字符串必须至少为(3 * inputBytesLength + 1)big