iT邦幫忙

0

C將英文字轉為二進制

有關數字轉二進制算法
可以用手刻的方式算出二進制的值


#include <stdio.h>

int main (void){
    char data[]="0";
    int i , n ;
    printf("enter a number to conversion bit value:\n");
    scanf("%d",&n);
    for(i = 3; i >=0; i--){
        if(n%2 == 0){
            data[i]='0';
        }
        else if(n == 1){
            data[i]='1';
            data[i-1]='1';
            i--;
            break;
        }
        else{
            data[i]='1';
        }
        n = n/2;
    }
    while(i>=0){
        data[i]='0';
        i = i-1;
    }
    printf("the number of bit value: \n");
    printf("%s\n",data);
}

目前以上程式只能輸入數字計算出二進制的值
https://ithelp.ithome.com.tw/upload/images/20211206/20137810fZj2lTWjrz.jpg
假如我今天也想可以同時讀取數字與文字 A B C D E等字串,也轉為二進制4 bit的方式顯示出的話
該怎麼做比較好

各位不好意思,沒有搞清楚名詞就發問
也謝謝各位大大,小的我去把一些bit與byte的名詞與作用區別去study過了
https://ithelp.ithome.com.tw/upload/images/20211206/20137810yOPZbG4qqw.jpg
簡單來說我想把文數字轉成二進位制去轉換為對應 4 bit 的文數字 value
大概像是這樣
https://ithelp.ithome.com.tw/upload/images/20211206/20137810ancWx9QsXK.jpg

如果我想不使用array的對應方式拆解的話,有什麼方法可以完成呢?

淺水員 iT邦大師 6 級 ‧ 2021-12-06 01:35:35 檢舉
在討論程式之前
你要先定義好字串如何轉換為二進位數值
例如你的 A 應該輸出什麼

如果是 ascii,A對應的值是 65
如果是 16 進位表示法,A對應的值是 10
如果是 Base64,A對應的值是 0
了解,謝謝提點,我想轉換為二進位制的形式
BASE64呢?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

8
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-06 08:23:52
最佳解答

如果急著要把英文字母轉成二進位
就 Google 「C 二進位」

如果沒那麼急,就找一本C的書
靜下心來,耐著性子,慢慢讀完

之所以這麼回答
以下是幾點原因:
1.標題是「8位元/8byte」,你寫的是「轉2進位」,程式執行結果也只有「4位元」
2.程式能處理的最大值是 15,16之後就錯了
3.標題是「C++」,你寫的是「C」

https://ithelp.ithome.com.tw/upload/images/20211206/20001787O8QZJDXnZH.png

位元 = bit
8位元 = 8 bits , 也就是 1 byte
4位元 = 4 bits , 也就是 1 nibble
1 個 byte = 2 nibble, 可以分為 Hi_Nibble, Lo_Nibble.
1 nibble 可以用 16進位 1碼來表示.
所以 1 byte 可以用 16進位 2碼來表示.
https://en.wikipedia.org/wiki/Bit
https://en.wikipedia.org/wiki/Nibble
https://en.wikipedia.org/wiki/Byte

建議靜下心來,先去圖書館借些書,逐步的練習.

阿~~ 被發現沒有做功課了
/images/emoticon/emoticon25.gif
感謝各位提點,對bit byte有比較有概念了
文章有修改過,再麻煩指點

1
淺水員
iT邦大師 6 級 ‧ 2021-12-07 00:29:08

雖然問題解決,我還是提供一些參考的寫法

暴力查表範例

#include <stdio.h>

int main(void)
{
    int n;
    //暴力查表法
    const char* data[16]={
        "0000", "0001", "0010", "0011",
        "0100", "0101", "0110", "0111",
        "1000", "1001", "1010", "1011",
        "1100", "1101", "1110", "1111",
    };
    
    //這邊不做錯誤檢查,假設使用者只會輸入一個 0~9 or a~f or A~F
    printf("enter a number to conversion 8 bit value:\n");
    scanf("%x", &n); // %x 允許 16 進位數字
    
    printf("the number of 8 bit value:\n");
    printf("%s\n", data[n]);
    return 0;
}

位元運算範例

#include <stdio.h>

int main(void)
{
    int i, n;
    char data[5];
    
    //這邊不做錯誤檢查,假設使用者只會輸入一個 0~9, a~f, A~F
    printf("enter a number to conversion 8 bit value:\n");
    scanf("%x", &n); // %x 允許 16 進位數字
    
    //利用位元運算轉換數值為二進位字串
    for(i=0; i<4; ++i) {
        data[i] = n & 1 << 3 - i ? '1' : '0';
    }
    data[4] = '\0';

    printf("the number of 8 bit value:\n");
    printf("%s\n", data);
    return 0;
}

哇! 基本上程式需求就是這樣

如果我想要輸出可以不只轉化一個文字呢?
例如FFFFFFFF
就會輸出
11111111111111111111111111111111
若是這樣該怎麼做呢?

我要發表回答

立即登入回答