iOS 16进制字串与字符串相互转换
2021-08-15 本文已影响0人
浅_若清风
一.16进制字串转字符串
创建一个model类来创建方法
//model.h文件中实现
void HexToStr(char *szDest, unsigned char *pbSrc, unsigned int dwLen);
//model.m文件中实现
void HexToStr(char *szDest, unsigned char *pbSrc, unsigned int dwLen)
{
if (szDest == nil || pbSrc == nil || dwLen == 0)
{
return;
}
char ddl,ddh;
for (int i=0; i<dwLen; i++)
{
ddh = 48 + pbSrc[i] / 16;
ddl = 48 + pbSrc[i] % 16;
if (ddh > 57) ddh = ddh + 7;
if (ddl > 57) ddl = ddl + 7;
szDest[i*2] = ddh;
szDest[i*2+1] = ddl;
}
szDest[dwLen*2] = '\0';
}
//调用
HexToStr(destStr, pdStr, jsonLen);
代码中szDest为存放目标字符串,pbSrc为输入16进制数对应字串的起始地址,dwLen 为16进制数的字节数。
二.字符串转化为16进制数
//model.h文件中实现
void StrToHex(unsigned char *pbDest, char *szSrc, unsigned int dwLen);
//model.m文件中实现
//将字符串转化为16进制数
void StrToHex(unsigned char *pbDest, char *szSrc, unsigned int dwLen)
{
char h1,h2;
unsigned char s1,s2;
for (int i=0; i<dwLen; i++)
{
h1 = szSrc[2*i];
h2 = szSrc[2*i+1];
s1 = toupper(h1) - 0x30;
if (s1 > 9)
s1 -= 7;
s2 = toupper(h2) - 0x30;
if (s2 > 9)
s2 -= 7;
pbDest[i] = s1*16 + s2;
}
}
//调用
StrToHex((unsigned char *)myStr, tmpString, (unsigned int)length/2);
代码中szDest为输出缓冲区,pbSrc为字符串,dwLen 为16进制数的字节数(字符串的长度/2)。