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 类型并避免微妙的问题。
请注意,此处没有标题中的 short
到 char
转换。
我已经看到这两种方式都完成了。这样做有什么好处或坏处吗?
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 类型并避免微妙的问题。
请注意,此处没有标题中的 short
到 char
转换。