Как канал чтения с размером 4 байта в 4 байта int возвращает больше данных? - PullRequest
0 голосов
/ 29 июня 2010

Чтение из канала:

    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?  

Как это возможно, если sample in представляет собой целое число без знака?Я думаю, что я упускаю что-то очень простое, успокойся!

Спасибо

Ответы [ 4 ]

3 голосов
/ 29 июня 2010

Судя по вашему комментарию, который говорит //36 bits? Я подозреваю, что вы ожидаете, что данные будут отправлены в формате BCD: Другими словами, где каждая цифра - это число, которое занимает четыре бита или две цифрыза байт.Таким образом, это приведет к потере впустую пространства, однако вы будете использовать четыре бита, но значения от 10 до 15 не используются.

Фактически целые числа представлены в двоичном виде внутри, что позволяет 32-битныйчисло для представления до 2 ^ 32 различных значений.Получается 4 294 967 295 (без знака), что больше, чем число, которое вы видели в sample_in.

3 голосов
/ 29 июня 2010

536739282 находится в пределах максимальной границы 4-байтового целого числа без знака, которое превышает 4 млрд.

2 голосов
/ 29 июня 2010

unsigned int, ваше 4-байтовое целое число без знака, допускает значения от 0 до 4 294 967 295. Это легко подойдет для вашего значения 536 739 282. (На самом деле это даже соответствовало бы стандартному знаку int.)

Подробнее о допустимых диапазонах см. На странице MSDN Диапазоны типов данных для C ++.

2 голосов
/ 29 июня 2010

536,739,282 легко поместятся в беззнаковые целые и 32 бита. Верхний предел для неподписанного целого равен 4 200 000 000 или около того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...