【发布时间】:2014-04-11 18:01:45
【问题描述】:
假设我有
unsigned char * buffer; // buffer len in 10000
我想将 buffer+50 转换为 buffer+54 到 int。以下代码有效
int c=(*((int *) (buffer+ 32));
但是有没有更好的方法来做到这一点,需要多少指令?
非常感谢。
【问题讨论】:
-
通过移位操作直接从字节中组装整数。它既有价值又可移植,包括具有 64 位
int的平台。如前所述,如果您使用的偏移量没有落在正确对齐的内存上,以便您的平台以int访问(无法承受在 x86 硬件上运行而作弊),那么您将有祸了。而且您最好已经知道入站数据的字节序。 -
除了@WhozCraig 所说的之外,通过读取每个字符并转换/或转换到您的结果中,您可以精确控制存储的字节顺序,只需编写代码“给我此地址处的整数”您要么依赖主机 CPU 的字节顺序,要么需要知道交换值。
-
是的,我同意。我知道字节序。我将在相同的字节序和 64 位上运行。我正在研究低延迟项目。如果我忽略字节顺序并使用相同的 CPU,这会起作用吗?