Short to Char 铸造

Short to Char Casting

我已经看到这两种方式都完成了。这样做有什么好处或坏处吗?

short x = 0x9D6C;
char cx[2];

First way:
cx[0] = x &0xff;
cx[1] = (x >> 8) & 0xff;

对比 第二种方式:

memcpy(cx, (char*)&x, 2);

有什么想法吗?

Is there any advantages or disadvantages to doing it either way?

是的,因为功能可能不同,代码应该做功能上需要的。

cx[0] = x &0xff; cx[1] = (x >> 8) & 0xff; 将最低有效值字节移至 cx[0] 并将下一个最高有效字节移至 cx[1].

memcpy(cx, (char*)&x, 2);x 的最低寻址字节移动到 cx[0] 并将 x 的下一个寻址字节移动到 cx[1].

这两种方法在具有特定 endian 和常见 short 尺寸时具有相同的功能。

什么是最好的取决于较大的代码而不是这个狭窄的片段。


就性能而言,这属于 micro optimization。一个好的编译器可以分析 memcpy() 并在没有函数调用的情况下生成高效的代码。程序员的时间最好花在处理更高级别的代码上以提高性能。


memcpy(cx, (char*)&x, 2);

不需要演员表

请注意 short 并不总是以特定的 endian 排列。不常见 short 不是 2 char.

E1 >> 8 导致 "If E1 has a signed type and a negative value, the resulting value is implementation-defined".

更好的代码会使用 unsigned 类型并避免微妙的问题。


请注意,此处没有标题中的 shortchar 转换。