【发布时间】:2018-01-10 09:25:04
【问题描述】:
有什么方法可以加速 C 中的 be32enc 吗?这是我为 uint32_t 所做的示例:
for (int i=0; i < 19; i++) {
be32enc(&endiandata[i], pdata[i]);
}
还有函数本身:
static inline void be32enc(void *pp, uint32_t x)
{
uint8_t *p = (uint8_t *)pp;
p[3] = x & 0xff;
p[2] = (x >> 8) & 0xff;
p[1] = (x >> 16) & 0xff;
p[0] = (x >> 24) & 0xff;
}
我用谷歌搜索了很多东西,但没有找到任何东西——这个话题不太受欢迎。目标 CPU 是 i3-7350k,我使用 msvc2017。也可以使用 MIT/GPL 库。
【问题讨论】:
-
你能相信 x 是小端吗?
-
我不同意这个副本。 OP 似乎不打算反转位,只打算反转字节。
-
我会依赖
hton函数。它是一种用于 TCP/IP 网络的实用函数,可将 32 位整数从主机字节序转换为网络(大字节序)字节序。您可以尝试根据您自己的实现在您的系统上对其进行基准测试 -
x86 有一个明确的字节交换和(最近)一个存储大端
标签: c optimization encode compiler-optimization endianness