首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

请教怎么将一个字符串两两解析成十六进制值存入一个字节中

2012-09-06 
请问如何将一个字符串两两解析成十六进制值存入一个字节中如字符串“4A9000”请问如何将它转换成十六进制数:

请问如何将一个字符串两两解析成十六进制值存入一个字节中
如字符串“4A9000”
请问如何将它转换成十六进制数:0x4A, 0x90, 0x00,从而使得这三个能分别存入字节数组中呢?
即是 unsigned char ch[3];
ch[0] = 0x4A;
ch[1] = 0x90;
ch[2] = 0x00;


[解决办法]

C/C++ code
int __stdcall CrnHexToByte(LPCSTR lpInBuf, LPBYTE lpOutBuf){    size_t uInLen;    uInLen = strlen(lpInBuf);    int nResult = 0;    if (uInLen < 2) return nResult;    BYTE c;    for (size_t i = 0; i < uInLen; i += 2)    {        // 输出高4位        c = lpInBuf[i];        if (c >= '0' && c <= '9') lpOutBuf[nResult] = (c - '0') << 4;        else if (c >= 'A' && c <= 'F') lpOutBuf[nResult] = (c - 'A' + 10) << 4;        // 输出低4位        c = lpInBuf[i + 1];        if (c >= '0' && c <= '9') lpOutBuf[nResult++] |= (c - '0');        else if (c >= 'A' && c <= 'F') lpOutBuf[nResult++] |= (c - 'A' + 10);    }    return nResult;}void __fastcall TForm1::Button1Click(TObject *Sender){    char sz[] = "4A9000";    unsigned char bt[3];    int n = CrnHexToByte(sz, bt);    Caption = n;}
[解决办法]
大概是这样的
C/C++ code
int ReadHexStr(const char *szSrc, unsigned char *pucOutput) {    const char *pch = szSrc;    int nCount;    int snChar = 0;    while ( *szSrc != 0 ) {        unsigned char ucValue;        switch ( *szSrc ) {        case '0' :        case '1' :        case '2' :        case '3' :        case '4' :        case '5' :        case '6' :        case '7' :        case '8' :        case '9' :            ucValue = *szSrc - '0';            break;        case 'A' :        case 'B' :        case 'C' :        case 'D' :        case 'E' :        case 'F' :            ucValue = *szSrc - 'A' + 10;            break;        case 'a' :        case 'b' :        case 'c' :        case 'd' :        case 'e' :        case 'f' :            ucValue = *szSrc - 'a' + 10;            break;        default :            assert(false);        }        nCount = snChar / 2;        if ( snChar++ % 2 == 0 )            pucOutput[nCount] = ucValue;        else            pucOutput[nCount] = pucOutput[nCount] << 4 + ucValue;    }    nCount = (snChar + 1) / 2;    pucOutput[nCount] = '\0';    return nCount;} 

热点排行