読者です 読者をやめる 読者になる 読者になる

流れるまにまに。

のんびり人の日々のめも。

【C/C++】BOM付きUnicode16の判定とファイルの読み込み

C/C++

.regファイルの中にほしい情報("{”から始まるGUID)がないかサーチするのに以下を使用。

そしたら.regが(BOM付き)Unicode16でうまく読み込んでくれなかったよ。

BOM付きとか誰が作るのよ・・・・。

  

※一行ずつ読んで、”{”から始まる文字列を取得。
→Guidか調査したり、適切な形に切り出す関数は別に作ってあるので、省略。

  

 

.regファイル一行目
Windows Registry Editor Version 5.00」
を読み込んだ結果が
buf = "y t W \0 i \0 n \0 d \0 o \0 w \0 s \0...."
みたいな感じに。

 

BOMついてる上にマルチバイトになっちゃってる・・・。



文字列とか、文字コードとか嫌い(・ω・`)

 

てことで、以下で書き換え。

 

 ↓ ↓ ↓

 

もうバイナリモードで開けばいいじゃない!!
欲しいのはGUIDの英数字文字列だけだもん!!
一行目読み込んだ時のbuf[0](BOMの部分)が空白になるけど、今回はそんなに厳密に文字列使ったりしないからいいや!!

今回はBOMついてたらUTF-16っていう謎判定をしてるけど、そこら辺のメモだからご愛嬌。

ファイル固定なので、とりあえずこれで。そのうちエンディアン合わせのコード追加しなきゃ!