C 将十六进制字符串转换为十六进制字符数组的快速方法
我需要将包含十六进制数的字符串转换为无符号字符数组 我在QT中有以下代码:C 将十六进制字符串转换为十六进制字符数组的快速方法,c,string,qt,hex,C,String,Qt,Hex,我需要将包含十六进制数的字符串转换为无符号字符数组 我在QT中有以下代码: QString data ... QByteArray byteArray; int bufSize = (data.length()) / 2; for (int i = 0; i < bufSize; i++) { byteArray[i] = data.mid(2*i, 2).toInt(NULL, 16);//Read the string two characters at a time.
QString data
...
QByteArray byteArray;
int bufSize = (data.length()) / 2;
for (int i = 0; i < bufSize; i++)
{
byteArray[i] = data.mid(2*i, 2).toInt(NULL, 16);//Read the string two characters at a time.
}
QString数据
...
QByteArray byteArray;
int bufSize=(data.length())/2;
对于(int i=0;i
我需要在C中执行相同的操作,但我不知道如何转换它
有人能帮我吗?最快的方法是使用查找数组:
int cvt[UCHAR_MAX+1] = {0};
cvt['0'] = 0;
cvt['1'] = 1;
// ...
cvt['9'] = 9;
cvt['a'] = 10;
// ...
cvt['f'] = 15;
cvt['A'] = 10;
// ...
cvt['F'] = 15;
for (i = 0; i < sizeof arr; i++) {
arr[i] = 16 * cvt[(unsigned char)data[2*i]] +
cvt[(unsigned char)data[2*i + 1]];
}
int-cvt[UCHAR_MAX+1]={0};
cvt['0']=0;
cvt['1']=1;
// ...
cvt['9']=9;
cvt['a']=10;
// ...
cvt['f']=15;
cvt['A']=10;
// ...
cvt['F']=15;
对于(i=0;i
使用sprintf()
实现从十六进制字符串
到十六进制字符数组
的最快转换
char buffer[USER_DIFINED_LENGTH];
sprintf(buffer,"%s", your_data);
此处用户定义的长度是可以保存数据的长度
有关sprintf()
的更多信息,请检查我找到了更快的方法:
char temp[3]={0};
char* p=data;
int bufSize = (strlen(data)) / 2;
for (int i = 0; i < bufSize; i++,p+=2)
{
//Read the string two characters at a time.
arr[i]=(unsigned char)(strtol(strncpy(temp,p,2),NULL,16));
}
chartemp[3]={0};
char*p=数据;
int bufSize=(strlen(数据))/2;
对于(int i=0;i
希望这对其他人有所帮助。如果您已经有了
十六进制字符串
,那么您可以使用sprintf()
将其转换为字符数组…我认为这是最快的方法。使用此方法,您只需将一个字符串复制到另一个字符串。上面的代码适用于十六进制数字为偶数的十六进制字符串。如果需要奇数十六进制字符串,则需要对其进行调整。“ab”
为171<代码>“5c”为92;显然,您的计算机将171
解释为“«”,将92
解释为“\”(ASCII?)+1,这无疑是一种快速的方法。顺便说一句:我怀疑你想要cvt[CHAR\u MAX+1]
,但我建议cvt[UCHAR\u MAX+1]
和cvt[(未签名的CHAR)数据[2*I]]
是@chux,谢谢;后期编辑。阵列不需要+1
however@pmgUCHAR\u MAX
通常为255,但通常有256个不同的char
,代码为0到255。仍然推荐+1。但我确实看到“\0”的a值不太可能被引用。“快”于什么?避免重复调用strtol
和strncpy
肯定会更快。