如何将无符号短数据[32]非常快地转换为unsigned char *

时间:2011-06-30 20:32:45

标签: c++ c optimization

如果你不得不转换

unsigned short data1[32]


unsigned char* data2

紧密循环执行1000万次 你会用什么功能来获得最佳性能?
我正在使用这个

reinterpret_cast<unsigned char*>(data1);

但是想知道是否有更好的方法

5 个答案:

答案 0 :(得分:6)

reinterpret_cast是性能寻求编码器的圣杯,即导致零时钟周期的代码。

答案 1 :(得分:2)

使用reinterpret_cast(unsigned char*)进行投射不会输出任何汇编指令。因此没有时间损失。

答案 2 :(得分:2)

reinterpret_cast不生成任何代码。它只是转换编译器如何处理寄存器或内存中的数据。没有比这更好的方法了。

答案 3 :(得分:1)

投射不是词法转换。

您可能需要使用itoa之类的函数,或者如果Windows依赖项已经用完,您可以使用boost::lexical_cast

取决于您的目标,不确定自己的最快或最佳方式。

编辑:响应OP的评论,此数据为UTF-8字符串。

reinterpret_cast是不够的,我的原始回答也不充分。您需要使用正确的编码来转换字符串。 UTF-8的字符0-127兼容为单字节字符,相当于ANSI(即41是'A')

然而,除此之外的任何事情都需要转换。对于超过127的字符,UTF-8可以使用2-6个字节来支持扩展语言的存储。

答案 4 :(得分:0)

在大多数情况下,类型是编译器的概念而不是机器代码。

将字节解释为特定类型只是机器代码指令在某些地址所期望的问题。

将类型转换为另一个类型(除dynamic_cast之外)不会生成任何实际代码。例外情况是在同一层次结构中的类型之间进行转换时,在这种情况下,转换可能会产生指针偏移。