我在使用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Üç
因为我不想打印输出,但我使用某些加密方法使用的返回值,现在当我传递这个不正确的返回值时,它会进行不正确的加密。
答案 0 :(得分:1)
正如已经指出的,其中一个问题可能是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
答案 1 :(得分:0)
继承人之一
getMountedComponent
不处理奇数长度输入。注意返回缓冲区的分配和调用者的释放。而且没有检查malloc
答案 2 :(得分:-1)
似乎toascii()
的要点是将值限制为最多使用7位,即toascii(x)
等同于x &= 127
。这可能不是你所期望的。
有关详细信息,请参阅the documentation。