OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ASCIIとバイナリの相互変換がしたい

  • すぐに回答を!
  • 質問No.192396
  • 閲覧数1315
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 88% (361/410)

アスキーで入力されたバイナリを、ソケットで送信するというものと書きたいのですが・・・。

具体的には、ファイルに 0x414243 と書いてあって、これを ABC という文字列でsocket通信で送りたいのです。
(これで、バイナリレベルでは414243が送れるはず)
socketの部分はできているのですが、変換でつまずいています。

まず、配列 @temp を用意して、41 42 43を順にpushしました。で、次にこれをABCに直してソケットの送信関数に渡せばいいのですが、どうやってもABCになってくれません。

pack("C*","0x41","0x42","0x43")
とやれば、ABCが出てきますが、
pack("C*",@temp)
では当然のようにダメ。
"0x41""0x42""0x43"を順に@tempに入れましたが、これも失敗。

Perlの16進表現はよくわからないのですが、どうしたらいいのでしょうか。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル9

ベストアンサー率 53% (52/98)

えと、41, 42, 43 ではなく、"0x41", "0x42", "0x43" と文字列にもせず、そのまま入れたらいいのではないでしょうか。

手元の環境では、
#/usr/bin/perl
@temp = (0x41,0x42,0x43);
print pack("C*", @temp);

で、
ABC
が出ました。
socket とかは使ったことがないのですが、0x41 とかの記法はC と同じです。
ちなみに、0101 みたいに0を先頭にすると8進法表記になります。
これもC と同じです。
お礼コメント
pythian

お礼率 88% (361/410)

ボケをかましていたようでお恥ずかしいです(汗
また、配列の初期化の方法が間違っていたようで、先頭にゴミがついていたのも原因だったようです。ひとつ勉強になりました。ありがとうございました。
投稿日時 - 2002-01-06 21:52:36
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ