c++ - 将大小为 4 字节的管道读入 4 字节 int 如何返回更多数据?

标签 c++ windows multithreading data-structures winapi

从管道读取:

    unsigned int sample_in = 0; //4 bytes - 32bits, right?


      unsigned int len = sizeof(sample_in); // = 4 in debugger
      while (len > 0)
   {
    if (0 == ReadFile(hRead,
                          &sample_in,
                          sizeof(sample_in),
                          &bytesRead,
                          0))
    {
                    printf("ReadFile failed\n");

    }

    len-= bytesRead; //bytesRead always = 4, so far

   }

在调试器中,第一次迭代通过:

sample_in = 536739282 //36 bits?  

如果输入的样本是无符号整数,这怎么可能?我想我缺少一些非常基本的东西,对我放轻松!

谢谢

最佳答案

从您说 //36 bits? 的评论来看,我怀疑您希望数据以 BCD 格式发送:换句话说,每个数字都是一个数字占用四位,或每个字节两位数。这种方式会导致空间浪费,但是,您将使用四位,但不使用值“10”到“15”。

事实上,整数在内部以二进制表示,因此允许一个 32 位数字最多表示 2^32 个不同的值。结果是 4,294,967,295(无符号),它恰好比您在 sample_in 中看到的数字大很多。

关于c++ - 将大小为 4 字节的管道读入 4 字节 int 如何返回更多数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135738/

相关文章:

c++ - 为什么 DWORD 值通常以十六进制表示?

ios - 如何从委托(delegate)在线程内构建我的单元格?

具有模板函数的嵌套命名空间中的 C++ ADL

c++ - 类型特征以获取 std::array 或 C 风格数组的元素类型

linux - Linux 下 JavaFX 的默认字体大小与 Windows 上的一样大

java - 并发修改异常问题

c++ - 命名互斥体的不同句柄结果

C++ Visual Studio 2010 LNK2019 错误 - 需要一些基本建议

c++ - 如何计算数组中的对数?需要对给定代码的解释

c - 执行 lex 的窗口无法识别 ./a.out