HIDARI日記(右)

そのときどき興味ある技術を中心にだらだら書いてます。内容は個人の見解であり、所属する企業を代表するものではありません。

テキストデータの実体はそのままで型だけ変えたいとかなんとか

お前今更何言ってんだ的な内容です…

何がやりたいかというと

メモリ上に,例えば以下のようなchar型配列に格納されたデータがあるときを考えます。このデータは実際にはchar配列に格納されたUTF-16の文字列「hoge」です。

char:    |__|__|__|__|__|__|__|__|
          68 00 6F 00 67 00 65 00

これをデータそのものは変更ぜずにUTF-16の文字列として扱えるようにしたい.こんなイメージ.

char   : |__|__|__|__|__|__|__|__|
          68 00 6F 00 67 00 65 00
wchar_t: |_____|_____|_____|_____|

そこで

char配列と同じバイト数のwchar_t配列を作ってmemcpyでメモリ単位でコピーする方向でやってみました. コードは以下.

// 事前にchar[]のバイト数 source_byte_size を求めておき
// wchar_t[]に必要な要素数を割り出す。
int wchar_t_element_count = source_byte_size / sizeof(wchar_t);

// wchar_t[]の要素を確保する。確保されるメモリは source_byte_size と等しくなるはず。
wcahr_t* dest_buffer = new wchar_t[wchar_t_element_count];
SecureZeroMemory(dest_buffer, source_byte_size);

// source_byte_size ぶんコピーする
memcpy_s(
    dest_buffer,
    source_byte_size,
    source,
    source_byte_size
);

おわりに

これってどういうやり方が賢いんですかね?