Проблема двоичного формата при записи в файл - PullRequest
0 голосов
/ 29 мая 2018

Ниже приведен тривиальный сценарий записи байта в файл:

set wf [open "test.bin" "w"]
set int_result 0x80
puts -nonewline $wf [binary format c [expr {$int_result}]]
close $wf
exit

Удивительно, но файл будет содержать 0x3F, а не 0x80.Кто-нибудь может объяснить, что происходит?

Большое спасибо, Дмитрий

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Tcl предпочитает читать и записывать текстовые файлы по умолчанию, что означает, что он выполняет ряд преобразований для данных, которые вы оба входите в Tcl и выходите в файл.При работе с двоичными данными вы хотите, чтобы они были отключены.Либо используйте wb вместо w в вызове open (точно так же, как в вызове C stdio fopen()), либо используйте fconfigure для перевода канала в двоичный режим после его открытия.

set wf [open "test.bin" wb]
set wf [open "test.bin" w]
# It's the -translation option for historical/backward-compatibility reasons
fconfigure $wf -translation binary

Они эквивалентны;b делает open вызов (реализацию) fconfigure внутри, чтобы установить именно эту опцию.

0 голосов
/ 29 мая 2018

Быстрое исправление: используйте

open test.bin wb

, чтобы открыть файл в двоичном режиме.

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