二进制stdin和stdout

Ric*_*ich 3 binary text stdin stdout

我正在寻找一对实用程序,这些实用程序读取stdin上新行分隔的整数列表,并输出等效于stdout的二进制(4字节),反之亦然.

我的第一个想法是一个简单的bash/linux命令可以做到这一点,但我无法找到一个.我的第二个想法是在C++中这样做,但我无法弄清楚如何将stdin或stdout更改为二进制流.

有什么好想法吗?我对任何特定的编程语言都是公正的.

unw*_*ind 5

您不需要“将标准输出更改为二进制”,只需向其输出二进制即可。这肯定会混淆例如连接到该流的终端仿真器,但这是意料之中的。

fscanf()读取每个整数的普通循环,然后是将fwrite()其写出的循环应该可以工作。不过要注意字节序问题,您可能希望单独输出每个字节。


Jer*_*que 5

在Perl中,您可以尝试:

perl -ne 'chomp; print pack 'i', $_;'
Run Code Online (Sandbox Code Playgroud)

这将为您提供至少32位的主机本机有符号整数,但可能更多取决于您的本地C编译器.

打包的其他选项可以代替'i',例如'l',它将给你一个签名长,应该是32位.还有更多的小端或大端选项.

有关完整说明,请参阅http://perldoc.perl.org/functions/pack.html.

这是你在C中的解决方案,如果你想以无聊的方式做到这一点. :)

#include <stdio.h>

int main () {
   int x;

   while (fscanf(stdin, "%i", &x)) {
      fwrite(&x, sizeof(x), 1, stdout);
   }

   return 0;
}
Run Code Online (Sandbox Code Playgroud)