Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;无符号字符内存拷贝_C++_Arrays_Unsigned Char - Fatal编程技术网

C++ c++;无符号字符内存拷贝

C++ c++;无符号字符内存拷贝,c++,arrays,unsigned-char,C++,Arrays,Unsigned Char,我需要将一个无符号字符数组从一个方法传递到另一个方法,我尝试使用以下代码: { unsigned char *lpBuffer = new unsigned char[182]; ReceiveSystemState(lpBuffer); } BOOL ReceiveSystemState(unsigned char *lpBuffer) { unsigned char strRecvBuffer[182] = { 0 }; //strRecvBuff

我需要将一个无符号字符数组从一个方法传递到另一个方法,我尝试使用以下代码:

{
     unsigned char *lpBuffer = new unsigned char[182];
 ReceiveSystemState(lpBuffer);

}

BOOL ReceiveSystemState(unsigned char *lpBuffer)
  {
      unsigned char strRecvBuffer[182] = { 0 };
      //strRecvBuffer construction

      memcpy(lpBuffer, strRecvBuffer, sizeof(strRecvBuffer));

      return TRUE;
 }
这三种方法(在
ReceiveSystemState
中使用)都没有达到我预期的效果。在使用它们中的每一个之后,它所复制的只是
strecvbuffer
中的第一个字符,仅此而已。
strRecvBuffer
元素之间有空字符,但我需要这些字符,因为该字符串是来自硬件设备的消息,该消息将使用协议进行分析。我错过了什么?我是否初始化
lpBuffer
错误

编辑:我使用了一个简单的
memcpy
方法来完成这项工作。仍然是相同的结果:复制的只是
strecvbuffer
的第一个字符

EDIT2:工作代码:

{
     unsigned char *lpBuffer = new unsigned char[182];
     ReceiveSystemState(lpBuffer);
     for (int i = 0; i < 144; i++)
     {
         memcpy(&c_dateKG[i], lpBuffer + i * sizeof(unsigned char), sizeof(unsigned char) );
     }

}    
  BOOL ReceiveSystemState(unsigned char *lpBuffer)
  {
     unsigned char strRecvBuffer[182] = { 0 };
     //strRecvBuffer construction

     memcpy(lpBuffer, strRecvBuffer, sizeof(strRecvBuffer));

     return TRUE;
  }
{
无符号字符*lpBuffer=新的无符号字符[182];
接收系统状态(lpBuffer);
对于(int i=0;i<144;i++)
{
memcpy(&c_dateKG[i],lpBuffer+i*sizeof(无符号字符),sizeof(无符号字符));
}
}    
BOOL接收系统状态(无符号字符*lpBuffer)
{
无符号字符strecvbuffer[182]={0};
//strecv缓冲区构造
memcpy(lpBuffer、strecvbuffer、sizeof(strecvbuffer));
返回TRUE;
}

你的代码完全是垃圾。一些注意事项:

使用
sizeof

使用
sizeof(静态名称)或<代码>元素计数*大小(arr类型)

例如:

unsigned char src[255];    
unsigned char dst[255];

// fill src with random data
for (int i = 0; i < 255; ++i) {
    src[i] = static_cast<unsigned char> (rand() % 255);
}

memcpy(dst, src, sizeof(dst));


// now dst will have copied values from src (random numbers)

@没有人…我不认为这会有什么不同,因为
无符号字符
有1字节大小。所以基本上,
182*sizeof(unsigned char)
182
是一样的。这些数据应该来自哪里?您可以定义strRecvBuffer来包含一个0,然后是垃圾。除此之外,memcpy将复制所有数组,循环也是如此。
={0}
是将所有元素设置为0的语法
memcpy(lpBuffer,strecvbuffer,182)
应该完成这项工作。还有一些东西你没有给我们看。还有:为什么有时你要强制执行
无效
,而不是其他?为什么要将
NULL
赋值给立即超出范围的变量,为什么要在
delete[]
之前检查NULL(如果NULL指针是合法的),而不是更早?既然如此,既然
new[]
保证永远不会返回空指针,为什么还要检查null呢?也许最重要的是:为什么要使用
new[]
,而不是
std::vector
?@MRM关于“一个从串行端口读取数据并返回strecvbuffer的方法”。在strecvbuffer上面的代码中,strecvbuffer是一个局部变量,因此我们假设您正在将它传递给不可见的方法?上面的代码不是源代码中导致问题的代码。我毫不怀疑您有一个问题,但是在发布之前,在整理您认为不重要的代码的过程中,您也整理了这个问题。如果对此有任何疑问,我建议您使用上面的代码创建一个独立的文件并运行它。假设dyn alloc和static都是182字节。行得通。我也试过了,结果是一样的:只复制了第一个字符。您的示例运行得很好,将该方法应用于我的代码不起作用。1。如果我的代码工作正常,那么系统memcpy工作正常2。打印无符号字符时,请确保将其转换为int(如果代码使用c++)或printf(对于c代码):unsigned char var=12;printf(“var为=%d\n”,(int)var);我确信memcpy工作得很好,在我的代码中仍然有一些我没有正确使用的东西。这真的毫无意义,因为我觉得语法现在看起来很好。示例代码是错误的!memcpy函数中的“src”和“dst”需要交换,正确:memcpy(dst,src,sizeof(src));检查一下。给出的示例代码似乎有效,因为未初始化的“dst”也包含随机字符。为了更好地进行测试,请在src初始化循环中使用i而不是rand()%255。
#include <iostream>
#include <string.h>
#include <time.h>
#include <stdlib.h>

using namespace std;

void print(unsigned char* arr, size_t size) {
    for (size_t i = 0; i < size; ++i) { 
        // see type casting (to int)!!!
        cout << "arr[" << i << "] = " << (int)arr[i]<< endl;
    }
}

int main() {
    srand(time(0));

    // unsigned char type hold values from 0 to 255
    unsigned char src[15];
    unsigned char dst[15];

    for (int i = 0; i < 15; ++i) {
        src[i] = rand() % 255;
    }

    memcpy(dst, src, sizeof(dst));

    print(src, 15);
    print(dst, 15);

    return 0;
}
arr[0] = 34
arr[1] = 80
arr[2] = 183
arr[3] = 112
arr[4] = 18
arr[5] = 120
arr[6] = 183
arr[7] = 0
arr[8] = 0
arr[9] = 0
arr[10] = 0
arr[11] = 57
arr[12] = 137
arr[13] = 4
arr[14] = 8
arr[0] = 34
arr[1] = 80
arr[2] = 183
arr[3] = 112
arr[4] = 18
arr[5] = 120
arr[6] = 183
arr[7] = 0
arr[8] = 0
arr[9] = 0
arr[10] = 0
arr[11] = 57
arr[12] = 137
arr[13] = 4
arr[14] = 8