是十六进制转储函数,但我需要的是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]);
}
}
所以,如何将字节转储为十进制字符串而不是十六进制字符串。提前谢谢!
答案 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