-5

我想将 中的十六进制值转换character arrayinteger.

int main()
{ 
    char arr[5];
    arr[0] = 0x05;
    int a = atoi(&arr[0]);
    cout << "Number = " << a; //output = 0 but i want here value 5  
}
4

4 回答 4

2

您根本不需要任何转换:

int main()
  char arr[5];
  arr[0] = 0x05;
  int a = arr[0];
}
于 2013-05-03T08:45:33.420 回答
1

您不需要任何类型的转换 -0x05已经是一个整数值。

如果你有一个 C 字符串,它是数字的文本表示,那么 1. 你必须 NUL 终止字符串,2. 你可以使用strtol()(或该函数系列的一个成员):

char arr[] = "0x05";
int n = strtol(arr, NULL, 0);
于 2013-05-03T08:39:47.497 回答
1

atoi 具有以下签名:

int atoi(const char* buffer);

您正在将非空终止缓冲区传递给您的函数。此外,您的“字符”代码值是 0x05,它转换为 ACK(确认)。您的号码已经是 5。简单地说:

std::cout << "Number = " << int(arr[0]);

会给你你想要的结果。

于 2013-05-03T08:42:35.607 回答
0

您将 0x05 分配给 char,ascii 表告诉 0x05 不能转换为任何数字,如果没有执行转换, atoi 函数返回 0。这就是为什么你的输出为 0

于 2013-05-03T08:45:59.480 回答