• ベストアンサー
  • 暇なときにでも

ASCIIコードへの変換方法

前の質問と似たような質問ですが困っております。 ポインタに文字列を格納し char *a="a"; char *b="ace"; このポインタの中身をASCIIコードで表示させるプログラム ポインタaの中身aはASCIIコード2進数で********です。 ポインタbの中身aceはASCIIコード2進数で************************です。 という感じのプログラムを作りたいのですが、8進数表示はここで教えてもらい理解できましたが2進数への変換方法がわからりません。 もしよろしかったら具体例等のプログラムのご教授願います。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数1261
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答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'; の部分がまだよく理解出来ません。 よろしかったら説明文をお願いします。

関連するQ&A

  • ASCIIコードへの変換方法

    ポインタに文字列を格納し char *a="a"; char *b="ace"; このポインタの中身をASCIIコードで表示させるプログラム ポインタaの中身aはASCIIコード8進数で001です。 ポインタbの中身aceはASCIIコード8進数で001003005です。 という感じのプログラムを作りたいのですが ASCIIへの変換方法がわからなく困っています。 もしよろしかったら具体例等のプログラムのご教授願います。

  • ASCIIコードに変換するには?

    ポケベルのコードをASCIIコードに変換するプログラムがどうしても書けません。。教えてください。 せめてアルゴリズムだけでもお願いします。

  • 16進をASCIIコードに変換する手法

    16進をASCIIコードに変換する手法を教えて下さい。 *例 もしchar型変数aに0x0aが入っていたら0x41(大文字にしたい) aの値が1~fどれがきても対応できるようにしたいのですが・・・ if文とかswitchを多用しなくても簡潔に記述できますか?

その他の回答 (2)

  • 回答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); // 最後に逆転

共感・感謝の気持ちを伝えよう!

質問者からのお礼

8進や16進の様に関数は無いんですね。 処理方法ありがとうございました。

関連するQ&A

  • ASCII文字列をEUCなどに変換したいができない

    いつもお世話になっております。 ファイルの文字コードがEUCのファイルの中に、 なぜか、文字コードがASCIIである文字列があります。 この文字列は、外部から受け取るカタチなので、 これはこれで、ASCIIでも、しかたないのかなという風に思い、 それならば、受け取った後、EUCに変換すればいいやと考え、 mb_convert_encoding($var,"EUC-JP","ASCII")を使って、変換を試みるも、 ASCIIのままなのです。 ASCIIである文字列には、変換されない鉄壁さというものがあるのでしょうか? 変換処理後に、mb_detect_encoding()で検査しますが、やはりASCIIのままです。 それならば!、ということで、 受け取る値(ここでは例として、"This_Value_is_ASCII_Encoding_hogehoge9999")を いったん手動のコピペ操作をして、 $UketoruAtai = "This_Value_is_ASCII_Encoding"; とし、 その値もやはり、ASCII文字列になっているので、 この、手動コピペ文字列ならば文字コードの変換はできるだろうと思い、 上記のmb_convert_encoding()の処理をしたわけですが、 この場合でも、やはり ASCIIは鉄壁でした。 いったい、これは、なんなんでしょうか、、、。 ちなみに、このASCII文字列は、英数字のみ(当たり前か。笑)の文字列です。 このASCII文字列を、EUC-JPにする手助けを、どなたか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 10進201、16進C9 のASCIIコードにつきまして。

    10進201、16進C9 のASCIIコードにつきまして。 vs2005 c#.net で int i = 201; (char)i; とキャストすると「Ё」 vbにて hoge = 201 chr(hoge) と変換すると「ノ」 となります。 この違いはなんなのでしょうか? また、C#でも「ノ」を出すにはどのようにすればいいのでしょうか?

  • ASCIIコード入力

    プログラムを作っていてどうしてもわからなくなりまして… #include <stdio.h> int main(void) { char c; c=38; printf("%c\n",c); return 0; } この場合は&が出てくるからいいんですけど… #include <stdio.h> int main(void) { char c; scanf("%c",&c); printf("%c\n",c); return 0; } この場合は97をscanすると9が出てきます。ASCIIコード入力でaを表示させたいんですが、何が間違っているのでしょうか? 初心者なもので…お願いしますm(__)m

  • ASCIIコードについて

    先日、仕事でシリアルケーブルで接続されているPC~装置間にラインモニタをセットし、通信電文を調査したところ、「31B9AEB5」となっており、装置上には「19.5」と表示されていました。対応として、 0x31=1 0xB9=9 0xAE=. 0xB5=5 のようになっているようです。ASCIIコードだと考えると「0x31=1」は納得するのですが、「0xB9=9」以降が良くわかりません。上記データから0x80を引くと「0x39」「0x2E」「0x35」となり、ASCIIコード表のデータに一致します。 そこで質問なのですが、上記の場合「0xB9」「0xAE」「0xB5」はASCIIコードなのですか?ASCIIコード表など見てみると0x00~0x7Fの表はよく見かけます。ちなみに、このプログラムは海外で作られたようで、日本で言う「JIS」のようなコードなのでしょうか?

  • ASCIIコードを文字に変換したい

    環境はVisualStdio.Net 2008のC++ Windowsフォームアプリケーションです。 C++の経験はまったくありません。 unsigned char型の配列 box[12]の中に既にアスキーコードでデータが格納されています。(例:box[0] = 48'0') これをtextbox->textにアスキーコードではなく文字で格納し、実行時に画面で確認できるようにしたいのですが、 (char)でキャストしてもfomat()で%xや%cにしても「0」でなく「48」で出力されてしまいます。 調べたらVBにはchrという関数があるみたいなんですが、これと同じ機能を持つ関数はVC++にはないのでしょうか?

  • N88BASICのASCII変換について

    こんにちは。palbanです。 現在N88BasicでFDにバイナリ保存されたプログラムコード をFileconvを使ってDOSフォーマットでHDに保存し N88BasicでASCII変換しプログラムコードを確認する 作業をしています。 そこでN88BasicでASCII変換するときに半角文字は変換 されるのですが全角文字が変換されず化けて表示されて しまいます。 全角文字を化けないようにする変換方法はないでしょうか? また、BasicプログラムのCVSやCMD等のコマンドが わかりません。Basic言語のリファレンスガイドを 置いているHPをお教え頂きたいです。 長文になってしまいましたが宜しくお願いします。

  • X86アセンブラで 16進数を10進数のASCIIコードに変換する方法

    X86アセンブラで16進数から10進数のASCIIコードに変換する方法を模索しております。 例:  0x64(100d) 期待値:0x31 0x30 0x30 ("1","0","0"の3ByteのASCIIデータ) といった内容になります。 論理演算等で求める手法がございましたら、ご教授頂ければ幸いです。

  • ASCIIコードについて

    VB6の質問です。 ↓例で、Record変数にASCIIコードを含んだ文字列が入ります。 Select文で各条件で、処理をしたいのですがASCIIコードの定義がわかりません。 ご教授していただないでしょか? Dim Record As String Private Sub test() ・ ・ Record = (STX)1234(ACK)5678(EOT)  ・ End Sub Select Record Case "(STX)" ← 'Case 02H?? ・ Case "(ACK)" ← 'Case 06H??  ・ Case "(EOT)" ← 'Case 03H?? ・ Case Else End Select

  • ASCII

    自己紹介メーカーみたいのを作ろうと思ってます。 文字列を計算してASCII表に対応数字を決め、数値を出して用意された言葉をくっつけて表示している事は分かったのですが、初心者なので作り方が分かりません。例などを作っていただけ無いでしょうか?

    • 締切済み
    • CGI
  • PSQLExceptionが発生する

    javaのプログラムをEclipseでデバッグ中なのですが、 socket通信で取得したString型のデータをPostgreSQL(ver8.3)のtext型に INSERTすると org.postgresql.util.PSQLException: ERROR: insufficient data left in message とエラーが発生してしまいます。 String型の変数infoに格納している文字列を EclipseのWatchWindowで見ると以下の様な値になっています。 変数名 info    "85E_ A B C t r a k " ※ "A B C t r a k "の部分だけフォントが異なる(ここだけ文字コード違う??) 試しにinfo変数の中身を byte[] btext = info.getBytes(); でbyte[]型に格納してみたら。 以下の様な値になっていました。 変数名 btext   [0]   56     ← ASCIIコードの'8'   [1]   53     ← ASCIIコードの'5'   [2]   95     ← ASCIIコードの'_'   [3]   0      ← ?   [4]   65     ← ASCIIコードの'A'   [5]   0      ← ?   [6]   66     ← ASCIIコードの'B'   [7]   0      ← ?   [8]   67     ← ASCIIコードの'C'   [9]   0      ← ?   [10]   116    ← ASCIIコードの't'   [11]   0      ← ?   [12]   114    ← ASCIIコードの'r'   [13]   0      ← ?   [14]   97     ← ASCIIコードの'a'   [15]   0      ← ?   [16]   107     ← ASCIIコードの'k'   [17]   0      ← ? となっています。。 この様な文字列をデータベースに格納するにはどうしたらよいのでしょうか? ちなみにEcripseでWatchした際に変なフォントになっていない文字列がINSERT できることは確認済です。

    • ベストアンサー
    • Java