Uncle Theodore
написал 31 января 2005 года в 06:01 (894 просмотра)
Ведет себя
неопределенно; открыл 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
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
в силу …мм… психологических?.. причин, когда чтение (аналогично записи в десятичной нотации) побайтно воспринимается как «первый — самый значащий», преобразование (int)*buffer несколько некорректно именно в этом плане ;) (в зависимости от архитектуры, естественно)
<font size=«-2»>плюс к тому, я-то, к примеру, знаю ещё и о tagged архитектурах, где такое преобразование может просто не работать и являться ошибкой ;))</font>
А тут это неважно. Число-то все равно случайное, вне зависимости от порядка байт. Вот если это чтение из бинарного файла, то тут надо задуматься, хотя бинарные файлы, в общем, непереносимы.
У меня смутное ощущение, что
делает не вполне то, что было задумано.
Если задача стоит именно так, то чтение в буфер «выразительнее». Но с обязательным предисловием, что так делать не надо.
кстати, да, слона-то..
но вот так, imho, точно не стОит приучать программировать.
Да, это я того-с… Бывает. :-)
Спасибо. В итоге, вернулся к
int result;
read(fd, &result, sizeof(int));
так и детишкам сказал.
Good Luck,
UT