我怎样才能访问不同大小的数组的字节数组?

时间:2016-01-05 20:03:39

标签: c++ arrays pointers byte

当我尝试使用指针访问数组数组时遇到问题,我有几个数组声明如下:

BYTE a[5] = {0xcc,0xaa,0xbb,0xcc,0xff};
BYTE b[3] = {0xaa,0xbb,0xff};
这个BYTE数组表示我想从dll加载到内存中的图像,我可以毫无困难地单独访问它们,但我想从一个带指针的循环访问它们......

我试图将它们放入这样的数组数组中:

BYTE* c[2] = {a,b};

但是当我想循环遍历这个指针c [i] doesent load image at i index into memory时,我该怎么办呢?

我试图在循环中使用此方法绘制图像以避免重复行(考虑c是图像[i])

void MenuIcon::drawIcons(LPDIRECT3DDEVICE9 npDevice)
{
    isMenuVisible = (Pos.x < 100) && (Pos.x > 0)?  true : false;

    if(isMenuVisible)
    for (int i = 0; i < 2; i++)
    {
        if (icon[i].img == NULL)D3DXCreateTextureFromFileInMemory(npDevice, &images[i], sizeof(images[i]), &icon[i].img);
        DrawTexture(icon[i].coord.x, icon[i].coord.y, icon[i].img);
    }

}

我在阅读完答案后尝试使用这样的方法:

 void MenuIcon::drawIcons(LPDIRECT3DDEVICE9 npDevice)
{
    isMenuVisible = (Pos.x < 100) && (Pos.x > 0)?  true : false;

    if(isMenuVisible)
    for (size_t i = 0; i < images.size(); i++)
    {

        std::vector<BYTE>& curArray = images[i];
        if (icon[i].img == NULL)D3DXCreateTextureFromFileInMemory(npDevice, &curArray, curArray.size(), &icon[i].img);
        DrawTexture(icon[i].coord.x, icon[i].coord.y, icon[i].img);
    }

}

但它仍然没有画任何东西....也许&curArray不是真的叫? NB - &gt;我记录了arrayofarray的图像和大小,它返回了正确的值....

1 个答案:

答案 0 :(得分:3)

您可以使用std::vector

#include <vector>
#include <iostream>
#include <iomanip>

typedef int BYTE;
typedef std::vector<BYTE> ByteArray;
typedef std::vector<ByteArray> ArrayOfByteArray;

using namespace std;

int main()
{
   // fill our array
   ArrayOfByteArray c = {{0xcc,0xaa,0xbb,0xcc,0xff}, 
                         {0xaa,0xbb,0xff}
                         // add more as desired...
                         };

   // loop on each entry
   for (size_t i = 0; i < c.size(); i++)
   {
      // get the byte array for entry i
      std::vector<BYTE>& curArray = c[i];

      // output the values found for this array
      for (size_t j = 0; j < curArray.size(); ++j)
         cout << std::hex << curArray[j] << " ";

      cout << "\n";
   }
}

Live Example

与数组不同,std::vector知道每个条目的大小。

在此处输入代码,然后添加代码以适应您尝试处理图片的行为。