カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810669
FAQカテゴリ(大) コンパイラ
最終更新日 2016-02-07

質問内容

TN76992: 文字列と 16進数

回答内容

テクニカルノート76992
ターゲット:すべて
コンポーネント:コンパイラ
公開日:2009年11月27日8時33分

 

概要
例: 時々、文字 '4' を、16進のアスキーの値 \x34 を定数文字列に挿入して書きたくなることがあります。

const char test[] = "123\x3456";

結果は、文字列 "123456" と同じになることを期待しています。

この場合の振る舞いについて、ANSI では「定義されない」としています。IARでも、全てのコンパイラについて、これを厳密にインプリメントしてきた訳ではありませんから「ふるまい」は、コンパイラの種類とバージョンにより異なります。

 

1つの解決策は以下のように書くことです。

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";

参考資料URL