Как записать необработанный тип / байты в стандартный вывод? - PullRequest
6 голосов
/ 15 сентября 2011

Я довольно долго борюсь с выводом необработанного типа на стандартный вывод. Вот что я пробовал и не получилось нужным способом:

r <- as.raw(c(0x41, 0x00, 0x43)) # r = "A\0C"
cat(rawToChar(r)) # displays warning and skips data after NULL (outputs "A")
cat(r) # outputs "41 00 43"
writeBin(r, stdout()) # error: can only write to binary connection

Я ищу способ вывода всех трех байтов / символов на стандартный вывод.

1 Ответ

8 голосов
/ 15 сентября 2011

Если вы используете операционную систему с «кошкой» или подобной программой, мы можем передать произвольные данные в стандартный вывод следующим образом:

con <- pipe("cat", "wb")
writeBin(as.raw(c(0x41, 0x00, 0x43)), con)
flush(con)

Это было проблемой в течение некоторого времени, особенно потому, что мы хотели бы использовать R для общего интерфейса шлюза (CGI). Я не верю, что есть более прямой маршрут, но вы можете посмотреть исходный код RApache , чтобы увидеть, как реализована функция sendBin.

...