nixp.ru v3.0

26 мая 2017,
пятница,
08:37:33 MSK

DevOps с компанией «Флант»
Uncle Theodore написал 31 января 2005 года в 06:01 (382 просмотра) Ведет себя неопределенно; открыл 58 тем в форуме, оставил 1537 комментариев на сайте.

Такой вопрос. В качестве примера для лекции пишу такую фишку:

Читаем четыре байта из /dev/random и превращаем в int (типа случайный).

Делаю так:

int count, result;

char buffer[sizeof(int)];

count = read(fd, buffer, sizeof(int));

result = (int)*buffer;

Потом вывожу result. Все работает, но можно ли это показывать детям? Не пример ли это хренового программирования?

Я сначала хотел написать

int count, result;

count = read(fd, &result, sizeof(int));

так тоже работало, но хотелось бы подчеркнуть, что чтение и запись производятся буферами, которые кидают байты, независимо от содержимого файла.

Как бы вы прочитали четыре байта и сделали int?

Good Luck,

UT

Genie

в силу …мм… психологических?.. причин, когда чтение (аналогично записи в десятичной нотации) побайтно воспринимается как «первый — самый значащий», преобразование (int)*buffer несколько некорректно именно в этом плане ;) (в зависимости от архитектуры, естественно)

<font size=«-2»>плюс к тому, я-то, к примеру, знаю ещё и о tagged архитектурах, где такое преобразование может просто не работать и являться ошибкой ;))</font>

Genie
в силу …мм… психологических?.. причин, когда чтение (аналогично записи в десятичной нотации) побайтно воспринимается как «первый — самый значащий», преобразование (int)*buffer несколько некорректно именно в этом плане ;) (в зависимости от архитектуры, естественно)

<font size=«-2»>плюс к тому, я-то, к примеру, знаю ещё и о tagged архитектурах, где такое преобразование может просто не работать и являться ошибкой ;))</font>

А тут это неважно. Число-то все равно случайное, вне зависимости от порядка байт. Вот если это чтение из бинарного файла, то тут надо задуматься, хотя бинарные файлы, в общем, непереносимы.

vnp
Uncle Theodore
Такой вопрос. В качестве примера для лекции пишу такую фишку:

Читаем четыре байта из /dev/random и превращаем в int (типа случайный).


У меня смутное ощущение, что

result = (int)*buffer;

делает не вполне то, что было задумано.

хотелось бы подчеркнуть, что чтение и запись производятся буферами, которые кидают байты, независимо от содержимого файла.

Как бы вы прочитали четыре байта и сделали int?

Good Luck,

UT

Если задача стоит именно так, то чтение в буфер «выразительнее». Но с обязательным предисловием, что так делать не надо.

Genie
vnp
result = (int)*buffer;

У меня смутное ощущение, что

делает не вполне то, что было задумано.

кстати, да, слона-то..

result = *(int*)buffer;

но вот так, imho, точно не стОит приучать программировать.

Uncle Theodore
Genie
У меня смутное ощущение, что

делает не вполне то, что было задумано.кстати, да, слона-то..

result = *(int*)buffer;

но вот так, imho, точно не стОит приучать программировать.

Да, это я того-с… Бывает. :-)

Спасибо. В итоге, вернулся к

int result;

read(fd, &result, sizeof(int));

так и детишкам сказал.

Good Luck,

UT