需要将unsigned char*类型的数组安全地转换为char*类型。我是这样做的,这样做是否正确?
std::vector < unsigned char > arr;
char *imgData = (char*) malloc( arr.size() );
for ( int i = 0; i < arr.size(); i++ ) imgData[ i ] = ( arr.at( i ) - 128 );
unsigned char*
转换为 char*
为什么会引发未定义行为? - ixSciimgData
的人实际上会将其作为char*
读取或写入。如果他们这样做,那么就是未定义行为。如果他们在读取之前将其强制转换回unsigned char*
,那么它就是明确定义的。 - Nicol Bolaschar*
写入unsigned char*
数据可能会搞砸一切,但我不明白为什么你说从这个转换后的指针读取也是未定义行为。它不会读取从相应的无符号字符转换而来的定义良好的字符吗? - ixScichar
可以是有符号的,而许多无符号值没有相应的有符号值。请记住:C++不定义溢出语义等内容。如果您在unsigned char
中有255,那么在char
中它看起来像什么?谁知道呢;C++不会说。 - Nicol Bolas