如何将无符号短数据[32]快速转换为无符号char*
How do you cast unsigned short data[32] to unsigned char* very fast
如果必须转换
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
(不会生成任何实际的代码。例外情况是在同一层次结构中的类型之间进行强制转换,在这种情况下,强制转换可能会产生指针偏移量。
相关文章:
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 将浮点数转换为无符号字符数组并打印出来
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 将无符号转换为复杂<int>原因符号转换警告
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 将字符串转换为无符号字符数组/字节数组
- 如何将字符串转换为无符号字符数组