读书人

怎么把一串字符的16进制形式变成字符串

发布时间: 2013-08-10 21:14:06 作者: rapoo

如何把一串字符的16进制形式变成字符串
如何把一个字符型数组,8个字节,变成一个16字节的字符串?
例如16进制存储为0x94,0x00,0xAB,0x19,0x48,x00,0x00,0x0F
转成字串就是"9400AB194800000F"
求高手
存储
[解决办法]

const std::string CFunc_Util::ToHex(const char *strin,int len)
{
if(strin == 0
[解决办法]
len <= 0) return "";

std::string retstr = "";
for (int i = 0; i < len; i++)
{
char szout[3] = {0};
sprintf(szout, "%02X", (unsigned char)strin[i]);
retstr += szout;
}
return retstr;
}
[解决办法]

char hex[8]={0x94,0x00,0xAB,0x19,0x48,x00,0x00,0x0F};
char str[17];
for (i=0;i<8;i++) sprintf(str+i*2,"%02X",(unsigned char)hex[i]);
printf("%s\n",str);

[解决办法]

字符串 操作
首先 写入一个中如下的字符串 sprintf函数
0x940x000xAB0x190x48x000x000x0F

然后删掉其中的子串"0x" ,这个自己写一个接口处理下,很简单!


[解决办法]
// Decode a Hex string.
string decodeHex(const byte* src, long srcSize)
{
// 00000030h: 00 01 02 03 04 05 06 07 08 09 10 10 10 10 10 10 ;
// 00000040h: 10 0D 0A 0B 0C 0D 0E 0F 10 10 10 10 10 10 10 10 ;
// 00000050h: 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ;
// 00000060h: 10 10 0D 0A 0B 0C 0D 0E 0F 10 10 10 10 10 10 10 ;
// create decoding table
byte invalid = 16;


byte decodeHexTable[256];
for (long i = 0; i < 256; i++) decodeHexTable[i] = invalid;
for (byte i = 0; i < 10; i++) decodeHexTable[static_cast<byte>('0') + i] = i;
for (byte i = 0; i < 6; i++) decodeHexTable[static_cast<byte>('A') + i] = i + 10;
for (byte i = 0; i < 6; i++) decodeHexTable[static_cast<byte>('a') + i] = i + 10;

// calculate dest size
long validSrcSize = 0;
for (long srcPos = 0; srcPos < srcSize; srcPos++) {
if (decodeHexTable[src[srcPos]] != invalid) validSrcSize++;
}
const long destSize = validSrcSize / 2;

// allocate dest buffer
string dest(destSize, '\0');

// decode
for (long srcPos = 0, destPos = 0; destPos < destSize; destPos++) {
byte buffer = 0;
for (int bufferPos = 1; bufferPos >= 0 && srcPos < srcSize; srcPos++) {
byte srcValue = decodeHexTable[src[srcPos]];
if (srcValue == invalid) continue;
buffer
[解决办法]
= srcValue << (bufferPos * 4);
bufferPos--;
}
dest[destPos] = buffer;
}

return dest;
}



如果你的 要求, 反一下方向,用这个函数道是可以的

读书人网 >C语言

热点推荐