[解決済み] C 言語の符号なし文字列の配列
質問事項
次のような文字列の配列があります。
char *T[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
しかし、このようにすると、各文字列は符号なし文字列の配列になります。
unsigned char *T[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
エラー "Initializing 'unsigned char *' with an expression of type 'char[5]' converts between pointers to integer types with different sign." つまり、使われている "0" と "1" の表現の一部が符号付きであると推測されますが、なぜ/どう対処したらいいのかがわかりません。 私は、各文字列が符号付き文字ではなく符号なし文字の配列であるような文字列の配列を持ちたいと思っています。 どなたかお手伝いいただけないでしょうか?
注:これはHWの問題に対するものですが、実際の問題ではなく、数多くある可能な解決策の中の小さな一歩に過ぎません。 しかし、明確な答えを出さなくても、理解の助けになれば良いと思います。 ありがとうございます。
どのように解決するのですか?
C言語の文字列は、文字列を表現する多くの方法のうちの1つで、以下の配列で構成されています。
char
は、末尾の
char
を持ち、その
null
の値を指定します。 コード中に "0000" がある場合、型的にはそのようになります。
の配列として代入することです。
unsigned char
を末尾に持つ
unsigned char
であり、NULL値を持つ。 このような場合、キャストを行うか、あるいはキャストを必要としない方法で初期データを表現する必要があります。
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言語スタイルの文字列を持つことの利点のほとんどが失われてしまうことです。 unsigned char "string"では、標準の文字列ライブラリを自由に使うことができないので、もし
printf
などの文字列指向の関数があります。
本当に、各文字の可能な位置に対して2つの値しか使っていません。 文字列で実行しなければならないやむを得ない理由がない限り、ブール値の配列を検討し、"0hello"のような文字列がコードに入り込む可能性を減らすか、または、次のような方法で実行します。 それよりも ビットフィールドを学んだことがある人は、符号なし文字列の中のビットをビットフィールドとして使ってください(文字列を扱っているという概念は捨ててください)。
最後の手法の利点は、使用するメモリが少ないことと、値が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 ...
関連
-
[解決済み】式は変更可能なL値でなければならない
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] JavaScriptで複数行の文字列を作成する
-
[解決済み] Bashで文字列の配列をループする?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】メモリー・クロバリング・エラー
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み] テスト
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"