【发布时间】:2012-10-05 07:38:22
【问题描述】:
我需要将一个无符号字符数组从一种方法传递给另一种方法,我尝试使用以下代码:
{
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;
}
这 3 种方法(在 ReceiveSystemState 中使用)都没有按我的预期工作。在使用它们中的每一个之后,它被复制的是来自strRecvBuffer 的第一个字符,仅此而已。 strRecvBuffer 从元素到元素都有空字符,但我需要它们,因为该字符串是来自硬件设备的消息,并且该消息将使用协议进行分析。我在这里想念什么?我初始化lpBuffer错了吗?
编辑:我使用了一个简单的memcpy 方法来完成这项工作。结果还是一样:复制的只是strRecvBuffer的第一个字符。
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;
}
【问题讨论】:
-
@Nobody...我认为这不会有什么不同,因为
unsigned char有 1 个字节大小。所以基本上182 * sizeof(unsigned char)与182相同。 -
我不明白。这些数据应该从哪里来?您将 strRecvBuffer 定义为包含一个 0 和之后的垃圾。除此之外,memcpy 将复制所有数组,您的循环也将复制。
-
= { 0 }是将所有元素设置为 0 的语法 -
memcpy( lpBuffer, strRecvBuffer, 182 )应该可以完成这项工作。还有一些你没有向我们展示的东西。另外:为什么你有时会投给void,而不是其他人?为什么要将NULL分配给立即超出范围的变量,为什么要在delete[]之前检查null(空指针是合法的),而不是更早?就此而言,您为什么要检查 null,因为new[]保证永远不会返回空指针?也许最重要的是:你为什么使用new[],而不是std::vector< unsigned char >? -
@MRM 关于“从串行端口读取数据并返回 strRecvBuffer 的方法”。在上面的代码中 strRecvBuffer 是一个局部变量,因此我们假设您将它传递给 到 看不见的方法?上面的代码不是您的源代码导致您的问题。我毫不怀疑您有问题,但是在将您认为不重要的代码发布到此处之前,在修剪您认为不重要的代码的过程中,您也解决了问题。对此有任何疑问,我建议您仅使用上面的代码创建一个独立文件并运行 that。假设 dyn-alloc 和 static 都是 182 字节。工作。
标签: c++ arrays unsigned-char