2014-12-05 72 views
1

我目前使用这种方法来一些字节值复制过来:C++指针字节数组优化

for (int i = 0; i < (iLen + 1); i++) 
    { 
     *(pBuffer + i) = Image.pVid[i]; 
    } 

我想问一下,如果有这些值超过一气呵成复制的办法,比如说使用memcopy来获得更多速度。

整个代码为:

extern "C" __declspec(dllexport) int __stdcall GetCameraImage(BYTE pBuffer[], int Type, int uWidth, int uHeight) 
{ 
    CameraImage Image; 

    int ret; 

    Image.pVid = (unsigned int*)malloc(4 * uWidth*uHeight); 
    ret = stGetCameraImage(&Image, 1, uWidth, uHeight); 
    if (ret == ERR_SUCCESS) 
    { 
     int iLen = (4 * uWidth * uHeight); 

     for (int i = 0; i < (iLen + 1); i++) 
     { 
      *(pBuffer + i) = Image.pVid[i]; 
     } 

     ////print(“ImageType = %d, width = %d, height = %d”, Image.Type, Image.Width, 
     //// Image.Height); 
     ////print(“First Pixel : B = %d, G = %d, R = %d”, Image.pVid[0], Image.pVid[1], 
     //// Image.pVid[2]); 
     ////print(“Second Pixel : B = %d, G = %d, R = %d”, Image.pVid[4], Image.pVid[5], 
     //// Image.pVid[6]); 
    } 

    free(Image.pVid); 

    return ret; 
} 

编辑:
* PVID是这样的:

unsigned int *pVid;    // pointer to image data (Format RGB32...) 
+2

你确定'我<(iLen + 1);'? – 2014-12-05 00:53:08

+0

不太确定。应该是我<艾伦? – tmighty 2014-12-05 00:54:24

+0

这有点不清楚:你想复制一个字节一个字节吗?换句话说,pBuffer的大小是多少:与Image中相同的项目数量或相同的字节数量? – 2014-12-05 00:55:47

回答

1

你的代码是目前编写方式,在循环每个任务会溢出,并给您pBuffer中存在一些垃圾值,因为您试图将unsigned int分配给​​。最重要的是,你会因为i计数字节跑出Image.pVid数组的末尾,而不是unsigned int小号

您可以通过这样做修复您的代码:

*(pBuffer + i) = ((BYTE*)Image.pVid)[i]; 

但是,这是非常低效的。最好一次移动整个单词,或者你可以直接使用memcpy:

memcpy(pBuffer,Image.pVid,iLen) //pBuffer must be at least iLen bytes long