第一个字符<<4 + 第二个字符

解决方案 »

  1.   

    0xEH? 错误的数据吧
    应该是 0x0A, 0x48, 0xdE 吧 
    strtoul
      

  2.   

    同意三楼,使用C标准库里的strtoul来做
    实际上你要实现的是把字符串里"A4"和"8d"提取出来,转换成数值型变量。
    另外要注意两点:
    0xeh是错误的,十六进制数没有h
    char b[]={0xa4,0x8d,0xeh}这里,应该用无符号型unsigned char,
    不然的话,有符号型char的取值范围是[-128,127],如果是0xEE的话,转换为10进制是238,238保存到有符号的char里显然会有点问题。
    void Convert(const char *szStr, unsigned char *pBuf, int nBufSize)
    {
    char szTemp[3] = {0};
    int nLen = strlen(szStr);
    for (int i=0,j=0; i<nLen-1,j<nBufSize; i+=2,j++)
    {
    szTemp[0] = szStr[i];
    szTemp[1] = szStr[i+1];
    pBuf[j] = (unsigned char)strtoul(szTemp, NULL, 16);
    }
    }int main()
    {
    char szStr[]="A48dEa";
    unsigned char Buf[3] = {0};
    Convert(szStr, Buf, 3);

    这里给出一个简单的例子,C标准实现
      

  3.   

    感谢啊!这个方法也不错啊。
    我还用下面的方法实现了一下,不知道还有更高效的方法吗?
    for (i = 0; i<count; i++)
    {
    char tmp[3];
    memset(tmp, 0, sizeof(tmp));
    memcpy(tmp, szStr + i*2, 2);
    sscanf_s(tmp, "%x", &buff[i], count);
    }