文字列を表すことができる多くの方法の1つであるC文字列は、値を持つchar
末尾で終了する配列で構成されます。これは、コードに「0000」が含まれている場合にタイプごとに取得されるものです。char
null
必要なのは、「0000」を、ヌル値を持つunsigned char
末尾で終了する配列に割り当てることです。unsigned char
何から始めているかを考えると、キャストする必要があります。または、キャストを必要としない方法で初期データを表す必要があります。
unsigned char T[][] = { { 0x30, 0x30, 0x30, 0x30, 0x00 },
{ 0x30, 0x30, 0x30, 0x31, 0x00 },
{ 0x30, 0x30, 0x31, 0x30, 0x00 },
{ 0x30, 0x30, 0x31, 0x31, 0x00 },
{ 0x30, 0x31, 0x30, 0x30, 0x00 },
{ 0x30, 0x31, 0x30, 0x31, 0x00 },
{ 0x30, 0x31, 0x31, 0x30, 0x00 },
{ 0x30, 0x31, 0x31, 0x31, 0x00 },
{ 0x31, 0x30, 0x30, 0x30, 0x00 },
{ 0x31, 0x30, 0x30, 0x31, 0x00 },
{ 0x31, 0x30, 0x31, 0x30, 0x00 },
{ 0x31, 0x30, 0x31, 0x31, 0x00 },
{ 0x31, 0x31, 0x30, 0x30, 0x00 },
{ 0x31, 0x31, 0x30, 0x31, 0x00 },
{ 0x31, 0x31, 0x31, 0x30, 0x00 },
{ 0x31, 0x31, 0x31, 0x31, 0x00 }
};
このアプローチで私が目にする主な問題は、そもそもCスタイルの文字列を持つことの利点のほとんどが失われることです。printf
unsigned char "string"を使用すると、使用できる標準の文字列ライブラリがないため、、またはその他の文字列指向の関数を使用する場合は、signedchar文字列タイプにキャストバックする必要があります。
実際には、可能な文字位置「0」と「1」ごとに2つの値のみを使用しています。文字列でそれを行うやむを得ない理由がない限り、ブール値の配列を検討して、「0hello」のような文字列がコードに組み込まれる可能性を減らします。ビットフィールドを紹介されている場合は、次を使用します。 unsigned char内のビットをビットフィールドとして(文字列を扱っている概念を破棄します)。
最後の手法の利点には、使用するメモリが少なく、値を0または1以外にすることができないことが含まれます。ただし、パックされたビットを人間が読める形式に変換するには、ルーチンの小さなコレクションを作成する必要があります。
unsigned char[] = { 0x00, 0x01, 0x02, 0x03, 0x04,
0x05, 0x06, 0x07, 0x08, 0x09,
0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
0x0F };
void displayChar(unsigned char value) {
switch (value) {
case 0x00: printf("0000"); break;
case 0x01: printf("0001"); break;
case 0x02: printf("0010"); break;
case 0x03: printf("0011"); break;
... and so on ...