バイナリデータの文字列変換

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ユリアン

バイナリデータの文字列変換

#1

投稿記事 by ユリアン » 15年前

バイナリを文字列に変換する方法で困っています・・・

数値がバイナリになっていて、日本語文字列は文字列になっているdatファイルを読み込みました。
datをテキストエディタで見たときには" 東京"という表示になっており、
バイナリエディタでは"01000000938C8B9E"となっています。
(もともとのデータは"1東京"です。)

ひとまずdatをバイナリで読み込み、メモリ上に"01000000938C8B9E"は確保出来たのですが、
東京という文字列に戻す方法がわからなくて困っています。
VBAでのChr()関数のようなものは、CかC++にはないのでしょうか?

どなたか方法等ご存知でしたら教えてください。
よろしくお願いいたします。

たかぎ

Re:バイナリデータの文字列変換

#2

投稿記事 by たかぎ » 15年前

> VBAでのChr()関数のようなものは、CかC++にはないのでしょうか?

そんなものは不要です。
該当する部分だけを抽出し、charの配列に入れればOKです(ナル文字を付加するのを忘れないように)。
C/C++そのものに限った話ではありませんが、多バイト文字やエンコーディングについても調べておくことをお勧めします。

ユリアン

Re:バイナリデータの文字列変換

#3

投稿記事 by ユリアン » 15年前

ありがとうございます、そのまま突っ込んで文字になることを確認しました。
しかしながらメモリアクセスで戸惑っています・・・

上記のdatファイルをvoid* addr に置いているのですが、
memcopy( strings , addr + 4 , 8);
とするとerror C2036: 'void *' : サイズが不明です。とコンパイルエラーになりました。
第二引数のアドレス指定はどのようにすればいいのでしょうか?

たかぎ

Re:バイナリデータの文字列変換

#4

投稿記事 by たかぎ » 15年前

voidは不完全型ですので、void*に対して加減算を行うことはできません。
いったんchar*などにキャストしてから加減算を行うようにしてください。

ユリアン

Re:バイナリデータの文字列変換

#5

投稿記事 by ユリアン » 15年前

ありがとうございます。
無事に解決できました!すごく助かりました。
でもアドレスに+1したら4byteシフトされてしまってちょっと???です。
datファイルの後半には1byteのデータやビットデータもあるので、
これからちょっと悩んでみます。

閉鎖

“C言語何でも質問掲示板” へ戻る