2011-02-03 12 views
6

文字をバイナリ表現に変換する簡単な方法はありますか?charをバイナリに変換する方法は?

メッセージを別のプロセスに一度に1ビットずつ送信しようとしています。 メッセージが "Hello"の場合は、最初に 'H'をバイナリに変換してから、ビットを順番に送信する必要があります。

アレイに格納することが望ましいでしょう。

ご意見ありがとうございます。擬似コードまたは実際のコードのいずれかが最も役立ちます。

私はこれが学校の授業で信号について学ぶためのものであると言えばいいと思います...それについて学ぶのは面白い方法です。 SIGUSR1は0として使用され、SIGUSR2は1として使用され、あるプロセスから別のプロセスにメッセージを送信することがポイントです。環境が他の通信方法をロックしていると思われます。

+0

は、あなたが実際に送信されることを期待するものの例を挙げてもらえますか? –

+0

一度に1つのバイナリ数字だけを送信したいですか?どうして? –

+0

よくその信号で...私が必要とするのは、文字のバイナリ表現です。おそらく私はint配列を提供し、ある関数を使って、それはバイナリになります。次に私は配列を循環して各ビットを送ることができます。これは、箱から考えていく上での運動のようなものです。 – Blackbinary

答えて

14

ビットをシフトするにはループするだけで、ビットを取得するには論理ANDを実行する必要があります。例えば

for (int i = 0; i < 8; ++i) { 
    send((mychar >> i) & 1); 
} 

unsigned char mychar = 0xA5; // 10100101 

(mychar >> 0) 10100101 
& 1   & 00000001 
============= 00000001 (bit 1) 

(mychar >> 1) 01010010 
& 1   & 00000001 
============= 00000000 (bit 0) 

のように...

+0

'unsigned char'を実行するか、そうでなければ、値が常に正であることを確認する必要があります。これは、' >> 'の結果が負のオペランドの実装定義の値を持つためです。 –

+0

改訂!ありがとうR. –

3

何について:outputcからのビットを書き込み

int output[CHAR_BIT]; 
char c; 
int i; 
for (i = 0; i < CHAR_BIT; ++i) { 
    output[i] = (c >> i) & 1; 
} 

、最下位ビット最初。

+0

それは私が欲しいものです。 – Blackbinary

関連する問題