2011-03-24 287 views
0

我有一个方法,采用无符号的字符,但我想通过它0x01。C++:如何将十六进制字符转换为无符号字符?

我知道我可以用“\ x01”表示字符串中的十六进制字符...... 但这仍然是一个有符号的字符。

编辑: 一些代码:

kennys_hash((unsigned char const *)"\x00"); // the method call 

错误:

src/main.cpp:88: error: invalid conversion from ‘const unsigned char*’ to ‘unsigned char’ 
src/main.cpp:88: error: initializing argument 1 of ‘unsigned char kennys_hash(unsigned char)’ 

方法头:

unsigned char kennys_hash(unsigned char out) 

而且,当流延只是为unsigned char,我得到这个错误:

src/main.cpp:88: error: cast from ‘const char*’ to ‘unsigned char’ loses precision 
+0

你能更具体?你的输入是什么,你想要的输出是什么?请提供代码。 – 2011-03-24 15:01:36

+0

增加了一些代码 – NullVoxPopuli 2011-03-24 15:10:13

+1

“\ x00”不是char。它的char *。它不匹配“unsigned char out” – Shelwien 2011-03-24 15:12:47

回答

3

0x01相同1,这是肯定的,因此它并不重要,如果它被认为是有符号或符号,数值是一样的。

如果要在文字上使用无符号类型,请使用0x01u

+0

通过使用0x01u,我完全可以忘记字符串!〜谢谢! – NullVoxPopuli 2011-03-24 15:15:42

0
void foo(unsigned char const * u); 
... 
foo((unsigned char const *) "\x01"); 
+0

,继续。 – NullVoxPopuli 2011-03-24 15:08:51

0

你可以通过它的无符号字符数组,像这样:

unsigned char data[5] = {1, 2, 3, 4, 5}; 
func_that_takes_unsigned_chars(data, sizeof data); 
0

我敢打赌,你不能把它\ X-01。因此你发送一个unsigned int。

在发送给func之前,您可以随时测试您的输入。如果输入< 0,则将其发回。

2

请注意“\ x00”是一个字符串常量(读取:字符数组),而不是单个字符常量。

使用单引号:'\ x00'是一个字符常量。

该类型可能是char,但在需要时会自动转换为unsigned char。有些编译器可能会发出警告。

1

您可以使用boost::lexical_cast

unsigned char bar = boost::lexical_cast<unsigned char>("\x71"); 
相关问题