在 C 中反转 char 数组的二进制值的最干净方法?

标签 c arrays binary

假设我有一个 len = 2 的字符数组。

char* array = malloc(2);
memset(array, 0, 2);

这是 2 个字节 = 0000000000000000。我怎样才能把它变成 11111111111111111?

我可以用一个 for 循环和一个指针来完成,但我认为这不是最简洁的方法。

最佳答案

假设您的长度 2 恰好在您的示例中,并且您希望无论 char 数组的长度如何都能正常工作。您仍然需要一个循环,但您可以一次反转最多 64 位的二进制值(在 64 位 CPU 上,忽略 SIMD 功能)。如果您真的在寻找最佳性能,则需要了解 SIMD。

您可以在循环的每次迭代中检查数组的剩余长度(您没有反转的值),并一次反转 64、32、16 或 8 位,最大的适合。

关于在 C 中反转 char 数组的二进制值的最干净方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46933141/

相关文章:

C malloc 和自由函数的奇怪行为

c - 线程二叉树的好处

java - 我正在尝试在 Java 中迭代两个数组,同时还检查值是否相等

c - 如何将数组从 .Net 传递到 C?

Swift 4 - Double 到 big-endian 的高效转换

针对 IAR EWARM 问题的 Kinetis MKE06Z 微 Controller 的自定义引导加载程序

php - 从网站与现金抽屉通信

iOS swift 3 : Comparing One all elements of Array in another array

c++ - 二进制数据 : write an entire object into a file or separated variables (no object)? 哪个性能更好

java - 输出中的程序十进制到二进制转换错误