c - 使用 visual studio 在 c 中将十六进制转换为 ascii

标签 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Üç

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

最佳答案

正如已经指出的那样,其中一个问题可能是 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/

相关文章:

c - 为什么在通过求和计算 FLT_MAX 时 float 在某个时刻不会增加?

android - 如何使用 Android 和 QT Creator 的 RTL SDR 库?

visual-studio - 在Visual Studio中使用多个项目/解决方案的最佳方法?

c# - 语法错误与 Visual Studio 中的编译器错误,或红色波浪下划线与蓝色波浪下划线

c - 如何使用 Xcode 在 C 上显示扩展的 ascii 表?

C 意外标识符 - For 循环增量

c - 如何计算分割单词后字符串中的字符数?

java - 在java中将字符转换为ASCII数值

c# - 为什么 ReSharper 想要对所有内容使用 'var'?

c# - 如何使用 SerialPort.Write(String) 将字符串写入串口