如何将无符号短数据[32]快速转换为无符号char*

How do you cast unsigned short data[32] to unsigned char* very fast

本文关键字:无符号 转换 char 数据      更新时间:2023-10-16

如果必须转换

unsigned short data1[32]


unsigned char* data2

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

reinterpret_cast<unsigned char*>(data1);

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

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

使用reinterpret_cast(unsigned char*)的强制转换不会输出ANY汇编指令。因此没有时间损失。

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

选角不是词法转换。

您可能需要使用类似itoa的函数,或者如果窗口依赖项不存在,则可以使用boost::lexical_cast

取决于你的目标是什么,我自己不确定最快或最好的方式。

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

那么,reinterpret_cast是不够的,我最初的答案也是不够的。您需要使用正确的编码来转换字符串。UTF-8的字符0-127作为单字节字符兼容,这相当于ANSI(即41是"A"(

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

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

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

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