使用visual studio

时间:2017-05-04 12:48:33

标签: c visual-studio ascii

我在使用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Üç

因为我不想打印输出,但我使用某些加密方法使用的返回值,现在当我传递这个不正确的返回值时,它会进行不正确的加密。

3 个答案:

答案 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