【问题标题】:dereferencing a char pointer取消引用 char 指针
【发布时间】:2016-08-27 15:13:35
【问题描述】:

我在下面的示例上花费了相当多的时间。我将只编写一个示例代码,并注意到它从来没有给我想要的输出。

终于成功了,但我无法解释为什么会这样。注释行是有问题的行。有人能告诉我我在这里缺少什么吗?

#include<stdio.h>
#include<string.h>

void Ascii2Hex( char* originalByte, unsigned char *ConvertedByte )
{
        while( *originalByte )
        {
                //if( *originalByte >= 48 && *originalByte <= 57 ) 
                if( *(originalByte) >= 48 && *(originalByte) <= 57 )
                        *ConvertedByte = *originalByte - 48;
                //else if( *(originalByte) >= 65 && *(originalByte) <= 70 ) 
                else if( *originalByte >= 65 && *originalByte <= 70 )
                        *ConvertedByte = *originalByte - 55;
                //else if( *originalByte >= 97 && *originalByte <= 102 ) 
                else if( *(originalByte) >= 97 && *(originalByte) <= 102 )
                        *ConvertedByte = *originalByte - 87;
                else
                {       printf( "Not a valid alpha numeric char[%d][%c][%x]\n", *originalByte, *originalByte, *originalByte );
                        ConvertedByte--;
                }
                ConvertedByte++;
                originalByte++;
        }
}

void main()
{
        char *OrigStr = "0123G456A";    
        unsigned char Result[100] = {0};
        int i;

        for( i=0; i<strlen( OrigStr ); i++ )
                printf(" Orig[%02x][%c]\n", OrigStr[i], OrigStr[i] );
        Ascii2Hex( OrigStr, Result );
        for( i=0; i<strlen( OrigStr ); i++ )
                printf(" Result[%02X]\n", Result[i] );
}

【问题讨论】:

  • 阅读:"What is a magic number and why is it bad?"。关于告诉你你缺少什么,你告诉我们你没有得到“期望的输出”,但奇怪的是没有透露输出是什么,你也没有说你是什么实际上得到。
  • 认真的吗?你在那些线上看不到“神奇数字”吗?好吧……那么关于预期和实际输出。你说,“终于成功了。”那么它现在可以工作了吗?
  • 您的两个代码显示完全相同的行为。出现问题时,您没有更改其他行吗?
  • 如果这些是您所做的唯一更改,那么它一定是编译器中的一个错误,因为这些括号没有任何区别
  • @libadarsh.so.1.0.1 两个集合都给我 相同 输出,与 OOPer 和 Drew 一致。

标签: c pointers


【解决方案1】:

您正在将每个十六进制数字解码为一个字节。八位字节由两个 hexdigits 表示。

关于幻数:48 或 65 代表什么?不是每个人都记得 ASCII 码。只需写“0”或“A”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2021-12-03
    • 2011-12-10
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多