文字列と 16進数
テクニカル・ノート 76992
アーキテクチャ:
All
コンポーネント:
compiler
更新日:
2018/08/25 13:54
はじめに
例: 以下のように、定数文字列に16進ASCII値の\x34を使用して'4'という文字を記述したい場合があります。
const char test[] = "123\x3456";
このとき期待する結果は、文字列"123456"です。
この場合、文字を表すのに\x34と\x345のどちらが使用されるか分からないため、ANSIでは、この場合の動作は「不定」と分類されています。当社の製品では、この件に関し厳密に実装されていないため、このような場合の動作は、コンパイラやバージョンによって大きく異なる可能性があります。
一つの解決方法としては、以下のように記述することです。
const char test[] = '1','2','3','\x34','5','6','\0'};
しかし、文字列が長い場合、すべての文字を1つずつ記述するのは面倒です。
より優れた解決方法は、以下のように文字列を連結することです。
const char test[] = "123\x34""56";
または、以下のようにします。
const char test2[] = "123""\x34""56";
ワイド文字の場合の解決方法は以下のようになります。
const wchar_t test3[] = L"123\x34"L"56";
または、以下のようにします。
const wchar_t test4[] = L"123"L"\x34"L"56";