我正在尝试将十六进制转换为字符串,但是在使用 strcpy 然后将字符串附加到另一个变量时我遇到了一个奇怪的问题。
下面是我的代码
int hex_to_int(char c) {
int first = c / 16 - 3;
int second = c % 16;
int result = first * 10 + second;
if (result > 9) result--;
return result;
}
int hex_to_ascii(char c, char d) {
int high = hex_to_int(c) * 16;
int low = hex_to_int(d);
return high + low;
}
void hexToString(char st[16], int length, char string[16]) {
char buf = 0;
char tempHTS[16] = {""};
char tempHTS1[16] = {""};
for (int i = 0; i < length; ++i) {
if (i % 2 != 0) {
sprintf(tempHTS, "%c", hex_to_ascii(buf, st[i]));
strcat(tempHTS1, tempHTS);
} else {
buf = st[i];
}
}
strcpy(string,tempHTS1);
}
void decodeToHex(unsigned char readingreg[16], int length, char hexString[16]) {
char tempDTH[16];
char tempDTH1[16]={""};
for (int j = 0; j < length; ++j) {
sprintf(tempDTH, "%x", readingreg[j]);
strcat(tempDTH1, tempDTH);
}
strcpy(hexString,tempDTH1);
}
int main() {
unsigned char readingreg[9];
readingreg[0] = 0x74;
readingreg[1] = 0x68;
readingreg[2] = 0x69;
readingreg[3] = 0x73;
readingreg[4] = 0x20;
readingreg[5] = 0x74;
readingreg[6] = 0x65;
readingreg[7] = 0x73;
readingreg[8] = 0x74;
char hexString[16];
char actualString[16];
decodeToHex(readingreg, sizeof(readingreg), hexString);
hexToString(hexString, (int) strlen(hexString), actualString);
printf("\n%s\n", actualString);
printf("\n%s\n", hexString);
return 0;
}
下面是输出
这个测试
7468697320746573这个测试
在第二个 printf 中,“this test”自动附加到十六进制字符串。 我不明白原因。请帮忙。
提前致谢。
最佳答案
readingreg
有 9 个字节,这意味着您至少需要 9*2+1 = 19
个字符来存储该数据的十六进制字符串(每个字节 2 个, 1 表示空终止符)。 hexString
只有 16 个字节,因此您最终会越界写入,从而导致未定义的行为。
关于c - strcpy 复制到其他字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47101005/