以十六进制字符串形式输入一个输入,然后将其转换为C中的字符串。十六进制字符串可以包含0x00,在转换时转换为Ascii中的0。这终止了字符串。我必须将值存储在char字符串中,因为API使用它。
我迄今为止代码:如何将字符串中的ascii值存储为0而不终止它?
int hex_to_int(unsigned char c) {
int first =0;
int second =0;
int result=0;
if(c>=97 && c<=102)
c-=32;
first=c/16 - 3;
second =c % 16;
result = first*10 + second;
if(result > 9) result--;
return result;
}
unsigned char hex_to_ascii(unsigned char c, unsigned char d){
unsigned char a='0';
int high = hex_to_int(c) * 16;
int low = hex_to_int(d);
a= high+low;
return a;
}
unsigned char* HextoString(unsigned char *st){
int length = strlen((const char*)st);
unsigned char* result=(unsigned char*)malloc(length/2+1);
unsigned char arr[500];
int i;
unsigned char buf = 0;
int j=0;
for(i = 0; i < length; i++)
{
if(i % 2 != 0)
{
arr[j++]=(unsigned char)hex_to_ascii(buf, st[i]);
}
else
{
buf = st[i];
}
}
arr[length/2+1]='\0';
memcpy(result,arr,length/2+1);
return result;
}
没有什么能阻止你把一个空字节的字符串,但需要一个字符串的函数(strlen的(),printf()函数等)会认为这是一个结束标记。 –
值得检查api文档,了解它如何期望这些十六进制字符串被转换。 – Orangesandlemons
你不是在混合'NUL'字符(ASCII值= 0)和“0”字符(ASCII值= 48)吗?显示你的代码。没有代码,问题就不清楚了。 –