-3

私の関数は、16 進記号を 2 文字の文字列に変換し、それを 1 文字の 2 つの文字列に分割します。結果の文字列を定数文字列と比較すると、エラーが発生します。Cannot convert 'unsigned char' to 'char *' first_ascii_code = 0x30;

コンパイラ: C++ Builder 6

コード:

BYTE from_byte_to_ascii_codes(int input_byte);
// transformation hex into string with of 2 characters and then 
// its transformation into 2 hex bytes. compiler - C++ Builder 6

BYTE from_byte_to_ascii_codes(int input_byte)
{
BYTE broken_input_byte[] = "";
input_byte = 0x01;
itoa(input_byte, broken_input_byte, 16);
// now broken_input_byte[] = "01";
if (broken_input_byte[0] == "0") { // here is mistake   
//Cannot convert 'unsigned char'  to 'char *'
first_ascii_code = 0x30;
}

このエラーを修正するにはどうすればよいですか?

4

2 に答える 2

3

テストbroken_input_byte[0] == "0"が正しくありません。おそらく、最初の文字が'0'char かどうかをテストする必要があるため、コーディングする必要があります(実装固有の名前である が に-ed されているとbroken_input_byte[0] == '0'仮定します)。BYTEtypedefchar

C では、次のようなテストfoo == "string"は確実に間違っています。実際には定数文字列リテラルデータのアドレスであるため、未定義の動作です。そのため、このようなテストでは、ポインターが定数ポインターと比較されます (コンパイラーが異なるアドレスにある2 つの定数文字列を作成する可能性があるため、false になることさえあります)。 !)。ところで、最近の GCC コンパイラでは、(でコンパイルすると) 警告が表示されます。"string"foo"aa" == "aa""aa"gcc -Wall

null で終わる文字列を比較するには、おそらくstrcmpを使用する必要があります。

于 2012-10-05T05:13:42.817 に答える
1

"0"は in の文字ではない文字列であり、Cinbroken_input_byte[0]BYTE同等charCあるため、両方が同じ型ではないため、エラーが発生します。

文字列を比較したい場合は、演算子strcmpではなく関数です。==

于 2012-10-05T05:12:28.190 に答える