
前の質問と似たような質問ですが困っております。
ポインタに文字列を格納し
char *a="a";
char *b="ace";
このポインタの中身をASCIIコードで表示させるプログラム
ポインタaの中身aはASCIIコード2進数で********です。
ポインタbの中身aceはASCIIコード2進数で************************です。
という感じのプログラムを作りたいのですが、8進数表示はここで教えてもらい理解できましたが2進数への変換方法がわからりません。
もしよろしかったら具体例等のプログラムのご教授願います。
No.2ベストアンサー
- 回答日時:
1文字のASCIIコードを2進数文字列に変換するには、一番上のビットから順番に0か1かを調べて'0'か'1'を並べていけばできます。
例えば、char buf[9];で9文字分のメモリを確保しておいて、下の関数で c2b(buf,'a'); とやれば、'a'の2進数表記をbufに格納できます。printf("%s",buf)で表示すればよいでしょう。
void c2b(char s[], char c) {
int i;
for (i=0; i<8; i++) {
s[i]=((0x80>>i)&c)?'1':'0';
}
s[i]='\0';
}
この回答への補足
前回の質問に続きこちらの方でも答えて頂きありがとうございます。
未だ初心者な私の知識だと
s[i]=((0x80>>i)&c)?'1':'0';
の部分がまだよく理解出来ません。
よろしかったら説明文をお願いします。
No.3
- 回答日時:
>よろしかったら説明文をお願いします。
簡単に動作を説明します。
0x80は、2進数で書くと10000000。最上位ビットだけ1で残りが0です。
これと任意の数値でAND演算をやると、最上位ビット以外は必ず0で、最上位ビットが0なら00000000、最上位ビットが1なら10000000になります。つまり、0x80&cで変数cの最上位ビットの状態がわかるわけです。
>>iはiビットの右シフトですから、0x80>>iのiを増やすと、10000000、01000000、00100000、・・・と1のビット位置が変わっていきます。8回繰り返せば、8ビットをすべて調べることができます。
では、c=0x61(2進数で01100001)の場合を見てみましょう。
i (0x80>>i) (0x80>>i)&c 判定 ((0x80>>i)&c)?'1':'0'
-------------------------------------------------------
0 10000000 00000000 偽 '0'
1 01000000 01000000 真 '1'
2 00100000 00100000 真 '1'
3 00010000 00000000 偽 '0'
4 00001000 00000000 偽 '0'
5 00000100 00000000 偽 '0'
6 00000010 00000000 偽 '0'
7 00000001 00000001 真 '1'
※C言語の判定では、0のとき偽、0以外のとき真となります。
結局、この式で返ってくるのは、左からiビット目が1なら'1'、0なら'0'ですから、これを文字列用の変数に入れてやれば、2進数を文字列として得ることができます。
No.1
- 回答日時:
そのものずばりの関数は標準にはないですね。
2で割っていき、そのそれぞれの余りで文字列を追加していくしか。
とりあえず一文字のASCIIコードを2進数の文字列に変換する処理を…
int a = 'a';
int cnt;
char sic[9]; // ASCII一文字は8bit+ヌル文字分
for (cnt = 0; cnt < 8; cnt++ )
{
if ( a % 2 )
sic[cnt] = '1';
else
sic[cnt] = '0';
a /= 2;
}
sic[cnt] = 0; // 最後のヌル
strrev(sic); // 最後に逆転
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のプログラムについてです
-
std::stringクラスのc_str()で...
-
char型にint型の数値を代入する。
-
new charとnew char[N]の違いは?
-
CStringからchar*への型変換に...
-
文字列内の数字削除
-
ポインタを使って回文かどうか...
-
char 文字列型 の表現範囲が-12...
-
VBAのプログラムで、DIAG = 1# ...
-
プログラムによく出てくるst...
-
C言語 配列の長さの上限
-
C# DataTableの行をソートしてD...
-
C++で、メンバもヒープに確保さ...
-
c言語のポインタへの文字列入力...
-
銀行ATMの数字キーの配列
-
C#で構造体の配列を持った構造...
-
newしないオブジェクトについて
-
Integer変数をカラにしたいので...
-
配列の要素数に変数を入れたい...
-
C言語 ファイルの指定された行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringからchar*への型変換に...
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
fstream型オブジェクトを関数の...
-
char型にint型の数値を代入する。
-
char 文字列型 の表現範囲が-12...
-
文字列を比較するプログラムな...
-
ostringstreamではまりました
-
文字列内の数字削除
-
C言語のプログラムについてです
-
csvファイルをfscanfで読み込む...
-
エクセルのMID関数は、C言語では?
-
ポインタを使って回文かどうか...
-
C言語でポインターで詰まってい...
-
文字列の途中から途中までを抽出
-
new charとnew char[N]の違いは?
-
文字列str内の全ての数字を...
-
以下のようなプログラムを書い...
-
char AA[]{"全角文字"};から"全...
おすすめ情報