gpt4 book ai didi

c++ - 关于如何在 Visual C++ 中将字节数组缓冲区复制到字节指针的问题

转载 作者:行者123 更新时间:2023-11-30 04:38:00 26 4
gpt4 key购买 nike

在查看了其他人的许多有用的交流之后,我在这里发布了我的第一个问题;这是非常令人兴奋!我认为这个问题很容易回答,但我希望有人能对此有所了解,因为它让我很烦恼。

我有一个函数接受作为字节指针传入的字节数组,程序的多层较低。该变量是定义为

的类的成员
m_GpsInputBuf[GpsInputBuflen];

相关函数接收指向该数组的指针,如下面的代码所示。当数据包的校验和未验证并且数据包的另一个同步字符位于数据包主体内时,该函数只是将数组中的字节向左移动。关于函数目的的所有问题都放在一边,我感兴趣的一点是将临时数组复制到参数字节数组指针。

pPacketbuf 变量的复制正如我所希望的那样发生,但是当函数终止时,存在于 ScanAndShift() 函数调用级别的 pPacketbuf 变量不受影响。我相信,这与 ScanAndShift() 是指针变量拷贝的论点有关,但我太接近问题了,现在无法理解它。有什么见解吗?代码如下:

int CFlirPumpDlg::ScanAndShift(BYTE *pPacketbuf)
{
int idx3 = 0;
BYTE tempGpsInputBuf[GpsInputBuflen];

for(int idx = 1; idx < GpsInputBuflen; idx++)
{
if(pPacketbuf[idx] == CFlirPumpApp::GPS_Start)
{
idx3 = idx;

for(int idx2 = 0; idx2 < (GpsInputBuflen - idx); idx2++)
{
tempGpsInputBuf[idx2] = pPacketbuf[idx3++];
}

pPacketbuf = (BYTE *)&tempGpsInputBuf;
return (GpsInputBuflen - idx);
}
}

return 0;
}

最佳答案

这里有两种方法。

1) 您分配一个新的缓冲区并用字节填充它。为此,您需要更改函数以采用这样的双指针:

int CFlirPumpDlg::ScanAndShift(BYTE **pPacketbuf)

但是,您必须分配一个新缓冲区而不是声明它。像这样:

BYTE* tempGpsInputBuf = malloc(...);

你必须改变这个:

pPacketbuf = (BYTE *)&tempGpsInputBuf;

进入这个:

pPacketbuf = tempGpsInputBuf;

此外,您在 pPacketbuf 中的所有索引都应该像这样完成:

*pPacketbuf[index]

而且您必须考虑释放“旧”缓冲区。

2) 您可以使用 memcpy 将字节从 tempGpsInputBuf 复制回 pPacketbuf

或者您可以选择 3. 选项,即更改您的算法以完成 pPacketbuf 中的所有工作。我不知道这是否可能。

我个人会选择 2. 或 3. 选项。

关于c++ - 关于如何在 Visual C++ 中将字节数组缓冲区复制到字节指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3449576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com