与Char Casting短路

时间:2019-03-14 21:37:58

标签: c arrays casting char short

我已经看到这是双向的。无论哪种方式都有优点或缺点吗?

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

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

vs。 第二种方式:

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  

以任何一种方式进行操作是否有优点或缺点?

是的,因为功能可能不同,所以代码应该执行功能上需要的工作。

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导致“如果E1具有带符号的类型和负值,则结果值是实现定义的”。

更好的代码将使用 unsigned 类型,并避免细微的问题。


请注意,标题中没有shortchar的投射。