-3

我的函数将十六进制符号转换为 2 个字符的字符串,然后将其分解为 2 个 1 个字符的字符串。当我将结果字符串与常量字符串进行比较时,出现错误: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,因此您应该编写代码broken_input_byte[0] == '0'(假设BYTE,实现特定名称,是typedef-ed 到char)。

在 C 中,任何类似foo == "string"的测试肯定是错误的;这是一个未定义的行为,因为"string"实际上是一些常量字符串文字数据的地址,所以这样的测试会将指针foo与某个常量指针进行比较(甚至"aa" == "aa"可能是错误的,因为编译器可能会构建两个"aa"位于不同地址的常量字符串!)。顺便说一句,使用最近的 GCC 编译器,您会收到警告(使用 编译时gcc -Wall)。

您可能想使用strcmp来比较以空字符结尾的字符串。

于 2012-10-05T05:13:42.817 回答
1

"0"is a string not character in Cwhile等效于in ,因此两者的类型不同,因此出现错误。broken_input_byte[0]BYTEcharC

如果要比较字符串strcmp是函数不是==运算符。

于 2012-10-05T05:12:28.190 回答