【问题标题】:ReadFile function lpbuffer and bytes to read clarifcationReadFile 函数 lpbuffer 和字节读取说明
【发布时间】:2018-02-14 01:20:27
【问题描述】:

我对此很陌生,因此我们将不胜感激。使用函数ReadFile时,lpBuffer的类型如何与“要读取的字节数”参数交互?

例如,如果你有一个 unsigned short MyShort[5] 作为 lpBuffer,然后你设置要读取的字节为 2。所有数据都会存储在 MyShort[0] 中吗?还是第一个字节进入 MyShort[0] 而第二个字节进入 MyShort[1]?当您设置要读取的字节数增加到 9 时会发生什么? 16 位会进入 MyShort[0],然后 16 位会进入 MyShort[1] 等等......?

谢谢

【问题讨论】:

  • 请求的字节数按顺序存储在缓冲区中。 documentation 也很清楚这一点。
  • lpBuffer 参数的类型为 void*ReadFile 调用无法知道你传递的类型,那么它应该如何响应不同的类型呢?
  • @IInspectable lpBuffer 不能是 char 或 int 类型吗?当为要读取的字节数指定 1 或 2 个字节时,我只是想弄清楚 8 位与 16 位的交互。
  • 没关系,你的缓冲区是什么类型。一旦你将它传递给ReadFile,所有类型信息都会丢失。 function signature 想要这样。

标签: c++ winapi buffer readfile


【解决方案1】:

lpBuffer 始终被视为指向指定字节数数组的指针 (nNumberOfBytesToRead)。实际读取的字节数将存储在lpNumberOfBytesRead 参数指向的变量中,或者稍后作为异步(重叠)结果存储。因此,在您的情况下,如果您请求读取 2 个字节,它可能会读取两个字节,将它们都存储在 MyShort[0] 中,或者仅将单个字节存储在 MyShort[0] 的下半部分,或者什么也没有。如果您请求读取 9 个字节,那么它将准备 最多 9 个字节,依次存储 2 + 2 + 2 + 2 + 1 个字节。

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    相关资源
    最近更新 更多