【问题标题】:converting binary to multiple characters将二进制转换为多个字符
【发布时间】:2020-02-03 18:50:50
【问题描述】:

我昨天基本上发布了这个问题,但我遇到了不同类型的错误。所以我试图创建一个程序,用户输入一个 12 位二进制汉明码序列,如“100010010001”,它应该打印出其对应的 ASCII 字符,在本例中为“A”。

问题是它似乎适用于像“A”这样的单个字符,但是如果我输入表示“ABC”的二进制序列 100010010001010110010010010010000011,它会打印出与应该打印的内容无关的随机字符。我不明白是什么导致了这个问题?

char charToBin(char usersInput[]) {
    char j = 0 ;

    for (int i = 0; i <= 12 ; i++) {
        if((i == 0) || (i == 1) || (i == 3) || (i == 7)){
                continue ;
        } ;
        usersInput[j] = usersInput[i] ;
        j++ ;
    } ;
    char c = strtol(usersInput, (char **)NULL, 2);
    return c;
}

【问题讨论】:

    标签: c character-encoding binary character ascii


    【解决方案1】:

    你应该试试我对你昨天那个问题的回答。该解决方案将起作用,如果您尝试将数组分解为多个步骤,则第一种方法应该非常快,因为它是一个小数组。

    尽管如此,对于这段代码,您的代码的主要问题是您试图从 12 个索引的 char 数组中删除 4 个索引,而没有做任何事情告诉 strtol()。所以在你的代码中,你只需要告诉 strtol() 通过在位置 8 处注入 char '\0' 或将是第 9 个字符的数组来停止在索引 8 处。此外,由于您要跳过索引 0 和 1,因此从索引 0 开始并评估它是索引 0 还是 1 是没有意义的。您可以从索引 2 开始。除此之外,“i”应小于 12在你的循环中。这是因为 12 索引数组的最后一个索引是 11,而不是 12。此外,j 不需要是字符。那应该是一个int。

    char charToBin(char usersInput[]) {
        int j = 0 ;
    
        for (int i = 2; i < 12 ; i++) {
            if( (i == 3) || (i == 7) ){
                    continue ;
            } ;
            usersInput[j] = usersInput[i] ;
            j++ ;
        } ;
        usersInput[8] = '\0';
        char c = strtol(usersInput, (char **)NULL, 2);
        return c;
    }
    

    【讨论】:

      【解决方案2】:

      您必须提供有关您的程序的更多信息,例如功能齐全的main()、示例输入和输出、如何调用函数等。

      但在此之前,我认为像这样的相同代码可能对你有用。

      p = len of usersInput  / 12
      char * charToBin(char usersInput[], int p) {
          char j = 0 ;
          char *c;
      
          for(int n=0;n<p;n++){
      
              for (int i = 0; i <= 12 ; i++) {
              if((i == 0) || (i == 1) || (i == 3) || (i == 7)){
                      continue ;
              } ;
              usersInput[j+n] = usersInput[i+n] ;
              j++ ;
          } ;
      
          c[n] = strtol(usersInput, (char **)NULL, 2);
      
      }
      
          return c;
      
      }
      

      【讨论】:

        【解决方案3】:

        你的 for() 循环应该只迭代 12 次,因此条件应该是 i

        char charToBin(char usersInput[]) {
        char j = 0;
        char to_Char[9];
        
        for (int i = 0; i < 12; i++) {
            if ((i == 0) || (i == 1) || (i == 3) || (i == 7)) {
                continue;
            };
            to_Char[j] = usersInput[i];
            j++;
        };
        to_Char[j] = '\0';
        
        char c = strtol(to_Char, (char**)NULL, 2);
        return c;
        }
        

        【讨论】:

          猜你喜欢
          • 2021-10-13
          • 2021-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-07
          • 2014-08-02
          相关资源
          最近更新 更多