ruby初心者です。
バイナリファイルを読み込んで、その値を2倍して再びバイナリファイルに書き込む
ソースを作りたいのですが、どなたかご教示願えますでしょうか。
以下試行錯誤して作ってみたのですが、このソースだと
例えば31というバイナリデータが62で書かれず、
36、32のasciiコードで保存されてしまいます。。
-----------------------------
BinData = open("in.data")
BinData.binmode
File.open("out.data", "wb"){|f|
while (b = BinData.read(1))
m = b.unpack('C')[0]*2 #取り込んだバイナリデータを整数化して2倍
p sprintf("%x", m)
k = format("%x", m) #16進数に変換
f.write(k)
end
}
すみませんが宜しくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
unpackしてるのだから、packすればよいかと。
No.1
- 回答日時:
> k = format("%x", m) #16進数に変換
これは、 「16進数として**人間が読めるようにした**文字列」になります。
m=31*2=62が入ったのなら
62=0x3e より
k="3e"
k.unpack("CC") # => [51,101]
なので
> 36、32のasciiコードで保存されてしまいます
というのも変です。
バイナリデータは 0x3、0x1 の2バイト
0x3→(2倍)→0x6→(format '%x')→ '6' →(ASCIIコード)→ 0x36
0x1→(2倍)→0x2→(format '%x')→ '2' →(ASCIIコード)→ 0x32
あるいは
バイナリデータは 0x31 の1バイト
0x31→(2倍)→0x62→(format '%x')→ '62' →(ASCIIコード)→ 0x36 0x32
なら理屈があいます。
# こちらの意味で使っているのなら、0xを付けるなど、16進表記だと明記してください。
chrメソッド、pack、format("%c")といったものが解決策になります。
ご回答ありがとうございます。
説明不足ですみません。
ただ解決策にあります、format("%x", m) をformat("%c", m)
にすることで目的としては達成しました。
丁寧に説明して頂きありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1、Rstudioで回帰直線を求める...
-
過剰なオブジェクト指向脳から...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
ExcelVBAで「Shift_JIS(MS932)...
-
pythonで同じコード内で複数の...
-
オートフィルタで抽出結果に 罫...
-
pythonにてseleniumを使うも、...
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
Excel VBAでOpenTextのFieldInf...
-
特定行の背景色を変えたいのですが
-
JANコードとPOSコードは同じ?
-
ACCESS VBA ヘッダなしCSVの入...
-
Nullの使い方が不正です。
-
VBA リストボックス(複数条件...
-
Gitのクローンについて
-
Microsoft Visual Studio Commu...
-
C# コードビハインドについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
VBAでファイルオープン後にコー...
-
COBOLの文法
-
Nullの使い方が不正です。
おすすめ情報