char* a;
unsigned char* b;
b = a;
// error: invalid conversion from ‘char*’ to ‘unsigned char*’
b = static_cast<unsigned char*>(a);
// error: invalid static_cast from type ‘char*’ to type ‘unsigned char*’
b = static_cast<unsigned char*>(static_cast<void*>(a));
// everything is fine
什么是cast 2和3之间的区别?如果将3中的方法用于其他(更复杂)类型,是否存在任何陷阱?
[编辑] 一些人提到了糟糕的设计等问题...
这个简单的例子来自一个图像库,它给我指向图像数据的指针作为char*
。显然,图像强度始终为正,因此我需要将其解释为unsigned char
数据。
int i = 65; unsigned int j = i;
这将编译,因为它是合法的,你总是可以合法地将一个字符存储在无符号字符中。 - Stephane Rollandunsigned char*
呢 :D 。你会写一个循环并将所有值复制到一个新数组中吗? - tauran