gpt4 book ai didi

c++ - 我应该如何将字节数组缓冲区传递给 writefile

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:40 26 4
gpt4 key购买 nike

我正在尝试将 16 字节数据写入串行端口,但我无法将值转换为 lpcvoid,这是我的代码,

  unsigned char Buffer[16];
for (int i=0; i<16; i++)
{
Buffer[i]=0x20+i;

bool bwrite=WriteFile(m_PortHandle, (LPCVOID)&Buffer[0], BufferSize, &Res, NULL);
}

我试过(LPCVOID)&Buffer[0]只把数组的第一个元素发到串口,(lpvoid)&Buffer只把数组的第二个元素发到串口。应该如何将字节数组传递给 writeFile?

谢谢,亮

最佳答案

如果你想在写入之前填充缓冲区,你需要在 for 循环之外进行写入,如下所示:

unsigned char Buffer[16];
for (int i=0; i<16; i++)
{
Buffer[i]=0x20+i;
}
bool bwrite=WriteFile(m_PortHandle, (LPCVOID)&Buffer[0], BufferSize, &Res, NULL);

此外,您不需要 &Buffer[0] -- &BufferBuffer 一样,Roddy下面指出的,是更可取的,因为即使您用指向已分配内存的指针替换数组,它也能正常工作。

更新:我从您的评论中看到您想要一次写入一个字节。要做到这一点,你真的不需要缓冲区来做任何事情,你可以这样做:(虽然我承认,我不明白为什么你不能用 WriteFile 一次写整个缓冲区——串口会无论如何一次只发送一个字节。也许 WriteFile() 有错误?)

unsigned char oneChar;
for (int i=0; i<16; i++)
{
oneChar=0x20+i;
WriteFile(m_PortHandle, (LPCVOID)&oneChar, 1, &Res, NULL)
}

您是否仍然需要转换为 LPCVOID 取决于您、您的编译器和您组织的编码标准。 :)

关于c++ - 我应该如何将字节数组缓冲区传递给 writefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21022967/

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