像 Cat 一样在 Windows 中获取二进制数据作为字符串的命令行工具?

Command line tool to get binary data as String in Windows like Cat?

所以我有一个程序可以像这样通过管道将字符串传输到标准输入来转换数据。

cat input.mp3 | myexe

除非我希望此命令行工具在 Windows 上 运行。

type input.mp3 | myexe.exe

而 cat 和 type 提供了不同的输入,因为 Windows 根据提到我使用 cat 的问题如何处理二进制文件。那么我怎样才能在 Windows 上更忠实地表现猫呢?或者有什么办法可以用纯 C 语言从 cat 输入?任何帮助将不胜感激。

更新:这是我的代码 https://github.com/Skylion007/LVDOWin

分叉并移植自: https://github.com/m13253/lvdo

我在我自己的代码中稍微修改了参数解析(只有 get-opt 而不是 get-opt-long),除此之外我在后面的 repo 中使用了与自述文件相同的命令行语句。我会 post 这里的代码,但是有很多问题,我不想淹没一个已经很复杂的答案。

type hello.mp3 | lvdoenc.exe -s 640x480 -q 6 -b8 | x264 --input-res 640x480 --fps 1 --profile high --level 5.1 --tune    stillimage --crf 22 --colormatrix bt709 --me dia --merange 0 -o public.mkv -

是我最初用来对文件进行编码的命令示例。在 Linux 上,我会使用 cat.

您可以通过这种方式重定向文件中的输入:

myexe < input.mp3

并在 myexe 中的 main 函数开头以这种方式强制 stdin 进入二进制模式:

_setmode(_fileno(stdin), O_BINARY);

您可能需要添加或删除下划线,具体取决于您的工具版本。

文本模式与二进制模式是从微计算的黑暗时代继承下来的 Windows 怪事。它一直追溯到 1970 年代,从一个名为 CP/M 的流行的前 MSDOS 操作系统开始,从中复制了它。 Unix 及其所有变体从来没有这个,Apple 很久以前就放弃了它的非标准行尾方案。您不太可能 运行 在旧的大型机上编写代码,这些大型机对基于行的文本文件有自己奇怪的概念。