如何在C ++中迭代void *的字节?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C ++中迭代void *的字节?相关的知识,希望对你有一定的参考价值。

循环遍历void *缓冲区的每个字节的最佳方法是什么,并根据特定条件为每个字节分配一个值?

        unsigned int bufSize = 100; //could be any value
        void* buffer = malloc(bufSize);
        char* bufferPointer = static_cast<char*>(buffer);

        for (unsigned int i = 0; i < bufSize; i++){ 

            if (i % 2 == 0){
                bufferPointer[i] = 0x00;
            }
            else{
                bufferPointer[i] = 0xff;
            }
        }
        buffer = static_cast<void*>(bufferPointer);

为什么这不起作用?我尝试转换为char *来迭代每个字节。

答案

你需要将void*施放到unsigned char*。然后,您可以使用指针算法遍历您拥有的内存块,并通过指针取消引用来设置值。

请记住,指针算法仅在数组中有效。为此目的,对象可以被认为是长度为1的数组。此外,并且可能容易混淆,N个int元素的数组将等同于N * sizeof(int) unsigned char元素的数组。

以上是关于如何在C ++中迭代void *的字节?的主要内容,如果未能解决你的问题,请参考以下文章

如何在二进制文件C中查找字节

如何在Django视图中使用for循环返回每次迭代[关闭]

当我们在iOS应用程序中使用Objective C输入错误的安全代码时如何显示警报

Objective C to Swift代码转换,似乎无法在Swift中正确处理字节

C语言习题如何在 C 中不使用任何分号打印从 1 到 N 的数字?

如何在C ++中将枚举导入不同的命名空间?