我正在寻找一对实用程序,这些实用程序在stdin上读取换行符中的换行符,并输出等效于stdout的二进制(4字节),反之亦然。
我的第一个想法是一个简单的bash / linux命令可以做到这一点,但我找不到一个。我的第二个想法是在C ++中这样做,但我无法弄清楚如何将stdin或stdout更改为二进制流。
有关这种方法的好方法吗?我对任何特定的编程语言都是公正的。
答案 0 :(得分:5)
在Perl中,您可以尝试:
perl -ne 'chomp; print pack 'i', $_;'
这将为您提供至少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;
}
答案 1 :(得分:4)
您不需要“将stdout更改为二进制”,只需输出二进制文件即可。这肯定会混淆,例如连接到该流的终端仿真器,但这是预期的。
读取每个整数的fscanf()
的简单循环,然后是fwrite()
来写出它应该有效。但要注意字节序问题,您可能希望单独输出每个字节。
答案 2 :(得分:1)
在Unix及其派生词上,没有必要担心stdin或stdout是否是“二进制”模式 - 二进制和文本模式是相同的。我没有在Windows上进行过广泛的测试,但在Cygwin下,我也没有发现任何问题。