バイナリを文字列に変換する方法で困っています・・・
数値がバイナリになっていて、日本語文字列は文字列になっているdatファイルを読み込みました。
datをテキストエディタで見たときには" 東京"という表示になっており、
バイナリエディタでは"01000000938C8B9E"となっています。
(もともとのデータは"1東京"です。)
ひとまずdatをバイナリで読み込み、メモリ上に"01000000938C8B9E"は確保出来たのですが、
東京という文字列に戻す方法がわからなくて困っています。
VBAでのChr()関数のようなものは、CかC++にはないのでしょうか?
どなたか方法等ご存知でしたら教えてください。
よろしくお願いいたします。
バイナリデータの文字列変換
Re:バイナリデータの文字列変換
> VBAでのChr()関数のようなものは、CかC++にはないのでしょうか?
そんなものは不要です。
該当する部分だけを抽出し、charの配列に入れればOKです(ナル文字を付加するのを忘れないように)。
C/C++そのものに限った話ではありませんが、多バイト文字やエンコーディングについても調べておくことをお勧めします。
そんなものは不要です。
該当する部分だけを抽出し、charの配列に入れればOKです(ナル文字を付加するのを忘れないように)。
C/C++そのものに限った話ではありませんが、多バイト文字やエンコーディングについても調べておくことをお勧めします。
Re:バイナリデータの文字列変換
ありがとうございます、そのまま突っ込んで文字になることを確認しました。
しかしながらメモリアクセスで戸惑っています・・・
上記のdatファイルをvoid* addr に置いているのですが、
memcopy( strings , addr + 4 , 8);
とするとerror C2036: 'void *' : サイズが不明です。とコンパイルエラーになりました。
第二引数のアドレス指定はどのようにすればいいのでしょうか?
しかしながらメモリアクセスで戸惑っています・・・
上記のdatファイルをvoid* addr に置いているのですが、
memcopy( strings , addr + 4 , 8);
とするとerror C2036: 'void *' : サイズが不明です。とコンパイルエラーになりました。
第二引数のアドレス指定はどのようにすればいいのでしょうか?
Re:バイナリデータの文字列変換
voidは不完全型ですので、void*に対して加減算を行うことはできません。
いったんchar*などにキャストしてから加減算を行うようにしてください。
いったんchar*などにキャストしてから加減算を行うようにしてください。
Re:バイナリデータの文字列変換
ありがとうございます。
無事に解決できました!すごく助かりました。
でもアドレスに+1したら4byteシフトされてしまってちょっと???です。
datファイルの後半には1byteのデータやビットデータもあるので、
これからちょっと悩んでみます。
無事に解決できました!すごく助かりました。
でもアドレスに+1したら4byteシフトされてしまってちょっと???です。
datファイルの後半には1byteのデータやビットデータもあるので、
これからちょっと悩んでみます。