簡體   English   中英

C中的十進制和十六進制二進制

[英]Binary to dec and hex in C

我想創建將返回十六進制數字的函數。 但是在更改為十進制數字后,我得到了一些錯誤的數字。 在輸出中,第一個數字是二進制,第二個也是二進制但采用int格式,第三個數字應為十進制。 但是我用十進制表示的數字有誤(請參閱第二行,應該是156,而不是220)。 誰能解釋我在做什么錯,我怎么能得到正確的數字? 謝謝。 這是我的輸出:

在此處輸入圖片說明

    char *encrypted = calloc((size_t)TEXT_LEN*3, sizeof(char));
int number[TEXT_LEN];
index=0;
for(int i=0;i<TEXT_LEN;i++){

    number[i]=atoi(binary[i]);

    printf("%s ",binary[i]);
    printf("%d ",number[i]);
    printf("%d\n",(unsigned char)number[i]);

    sprintf(encrypted+index,"%x ",(unsigned char)number[i]);

    index+=3;
}

printf("%s\n",encrypted);
free(encrypted);

編輯:我在注釋中找到了解決方案,並通過在行中使用功能strtol對其進行了修復:

number [i] = strtol(binary [i],NULL,2);

如果數字值小於16,則寫入的字符串長度為2,最后插入char'\\ 0'。 使用固定尺寸

sprintf(encrypted+index,"%02x ", number[i]);
index += 3;

或使用sprintf函數的返回值(即寫入的字符串長度)來增加索引

index += sprintf(encrypted+index,"%x ", number[i]);

我希望兩者結合

index += sprintf(encrypted+index,"%02x ", number[i]);

基於二進制的八個字符串,上述user3121023的方法將為您提供正確的十進制數字

number[i] = strtol(binary[i], NULL, 2);
printf("%s ", binary[i]); // 1st col
printf("%d\n", number[i]); // 2nd col

在輸出的第二行中,我編寫了一個C plus plus程序來解釋您的疑問:

int value = 10011100;
cout<<bitset<sizeof(int)*8>(value)<<value<<endl;    // 0000000010011000110000011101110010011100
unsigned char va = (unsigned char)value;
cout<<bitset<sizeof(unsigned char)*8>(va)<<endl;    // 11011100

將十進制數10011100轉換為二進制數10011000110000011101110010011100 ,然后將其放入無符號字符中,得到11011100 ,即220。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM