十六进制与字符串之间互转

    xiaoxiao2022-06-24  34

    下面是函数: // 字节数据转换为可打印字符串 // 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01" // 输入: pSrc - 源数据指针 //          nSrcLength - 源数据长度 // 输出: pDst - 目标字符串指针 // 返回: 目标字符串长度 int bytes2HexStr(unsigned char* pSrc, unsigned char* pDst, int nSrcLength) { const char tab[]="0123456789ABCDEF"; // 0x0-0xf的字符查找表 for (int i = 0; i < nSrcLength; i++){ *pDst++ = tab[*pSrc >> 4]; // 输出高4位 *pDst++ = tab[*pSrc & 0x0f]; // 输出低4位 pSrc++; } // 输出字符串加个结束符 *pDst = '\0'; // 返回目标字符串长度 return (nSrcLength * 2); } // 可打印字符串转换为字节数据 // 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} // 输入: pSrc - 源字符串指针 //          nSrcLength - 源字符串长度 // 输出: pDst - 目标数据指针 // 返回: 目标数据长度 int hexStr2Bytes(unsigned char* pSrc,unsigned   char* pDst, int nSrcLength) { for (int i = 0; i < nSrcLength; i += 2) { // 输出高4位 if ((*pSrc >= '0') && (*pSrc <= '9')){ *pDst = (*pSrc - '0') << 4; } else{ *pDst = (*pSrc - 'A' + 10) << 4; } pSrc++; // 输出低4位 if ((*pSrc>='0') && (*pSrc<='9')){ *pDst |= *pSrc - '0'; } else{ *pDst |= *pSrc - 'A' + 10; } pSrc++; pDst++; } // 返回目标数据长度 return (nSrcLength / 2); } 使用: unsigned char src[255] = {0x1A,0x0,0x22,0x89,0xff,0xee,0xbc}; unsigned char dst[255] = {0}; int szLength = 0; int byLength = 0; //to hexstr byLength = bytes2HexStr(src,dst,7); printf("dst: %s\n", dst); //hexstr 2 str szLength = hexStr2Bytes(dst,src,strlen((const char *)dst)); for(int i=0; i<szLength; i++){ printf("x, ",src[i]); }
    转载请注明原文地址: https://ju.6miu.com/read-1123809.html

    最新回复(0)