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

问题描述 投票:0回答:1

循环遍历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 *来迭代每个字节。

c++ pointers byte void-pointers
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.