我在使用 toascii()
时遇到了一些问题,它将任何 int 转换为 ascii,但不是 int < 10,它返回 \x1
或 \x2
等等,但不是它应该代表的 ascii 符号。所以,请提供任何帮助。
我的代码是这样的:
char* PostUnpack()
{
char* InStr = "04214FABF666DCE7";
int Len = strlen(InStr);
int Count, OutCount = 0;
int IntToHex;
char HexToChr[3] = "";
char TempCnv;
char RetStr[20] = "" ;
for(Count = 0; Count < Len; Count++)
{
strncpy(HexToChr,&InStr[Count],2);
IntToHex = (int) strtol(HexToChr, NULL, 16);
TempCnv = IntToHex;
toascii(TempCnv);
RetStr[OutCount] = TempCnv;
strncpy(HexToChr, "", strlen(HexToChr));
Count++;
OutCount++;
}
return RetStr;
实际上在调试中是这样的:
\x4!O«öfÜç
虽然它应该是:
!O«öfÜç
因为我不想打印输出,但我使用了一些加密方法使用的返回值,现在当我传递这个不正确的返回值时,它进行了不正确的加密。
最佳答案
正如已经指出的那样,其中一个问题可能是 toascii()
尽管按设计工作,但并未按照您期望的方式生成其转换值。您必须使用函数的返回值来获取转换后的值。例如,正如您所说:
toascii(TempCnv);//the converted value is returned, and you are not capturing it.
^^^^
使用直接赋值语句来捕获这样的值:
char c = toascii(0x51); //example value should produce ASCII character 3
或者你可以使用字符串函数 sprintf() 将转换后的值放入变量中:
char c = 0;
sprintf(c, "%c", toascii(0x51));
另外,可打印的 ASCII 字符范围是 0x20 - 0x7E。有一篇论文讨论了在尝试使用不可打印字符时遇到的问题 here
关于c - 使用 visual studio 在 c 中将十六进制转换为 ascii,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43783353/