三行代码  ›  专栏  ›  技术社区  ›  noNAme

从十进制到二进制的编码输出错误[重复]

  •  1
  • noNAme  · 技术社区  · 5 天前

    我的程序输出有问题,结果应该是将a编码为二进制01000001。我的成绩是10111110。你能告诉我我做错了什么或哪里有错误吗?

    bool bits1[8];
    encode_char('A', bits1);
    for(int i = 0; i < 8; i++){
        printf("%d", bits1[i]);
    }
    printf("\n");
    // prints: 01000001
    

    10111110

    #include <stdio.h>
    #include <stdbool.h>
    #include <math.h>
    #include <string.h>
    
    void encode(const char character, bool bits[8]);
    char decode(const bool bits[8]);
    
    int main(int argc, char *argv[]) {
        bool bits1[8];
        encode('A', bits1);
        for(int i = 0; i < 8; i++){
            printf("%d", bits1[i]);
        }
        return 0;
    }
    
    
    void encode(const char character, bool bits[8]){
        int char_val = (int) character;
        int final_index = 8;
    
        for( int i = 0; i< 8; i++){
            final_index--;
            if(char_val % 2 == 0){
                bits[final_index ] = 1;
            } else {
    
                bits[final_index ] = 0;
            }
    
            char_val = char_val / 2;
        }
    
    }
    
    
    1 回复  |  直到 4 天前
        1
  •  0
  •   Guillaume Racicot    5 天前

    由于数组是函数参数,因此其行为与指针相同。这就是它在C中的工作原理。在这种情况下, sizeof

    由于阵列具有固定大小,因此只需使用该大小:

    void encode(const char character, bool bits[8]){
        int char_val = (int) character;
        int final_index = 8;
    
        for( int i = 0; i< 8; i++){
            // ..
        }
    }
    

    如果不想重复,可以在C中定义宏。预处理器将负责复制粘贴,而不是您:

    #define BITS_SIZE 8
    void encode(const char character, bool bits[BITS_SIZE]){
        int char_val = (int) character;
        int final_index = 8;
    
        for( int i = 0; i< BITS_SIZE; i++){
            // ..
        }
    }