Windows命令行能否输入二进制数据?如何向控制台程序发送指定二进制字节?
嘿,这两个问题问得挺实在的,我来给你详细拆解清楚:
问题1:Windows命令行中能否输入二进制数据?
Windows的CMD和PowerShell本质上都是文本优先的环境,你没法直接在命令行里敲出像0x80、0xF4这类不可打印或者超出常规字符范围的二进制字节——毕竟键盘输入的都是字符,会被系统转成对应的编码(比如UTF-8、GBK)。不过我们可以通过间接手段生成并输入二进制数据:
- 用PowerShell直接构造字节数组,写入文件或者通过管道传递:比如
[byte[]]@(0x80, 0xF4, 0x12) | Set-Content -Path "binary_input.bin" -Encoding Byte就能把指定字节写入文件,后续可以用这个文件作为输入源。 - 借助第三方工具:比如旧版Windows自带的
debug.exe(现在可能需要手动找资源),或者装了Git Bash/WSL的话用dd命令来构造二进制流,再重定向给程序。
问题2:给接收用户输入的控制台程序发送指定二进制字节(0x80、0xF4、0x12)
当然可以,而且有几种靠谱的方法,取决于你的程序是怎么读取输入的:
方法1:文件重定向(最稳妥)
先把需要的二进制字节写入文件,再让程序读取这个文件的内容作为输入:
- 用PowerShell生成二进制文件:
[byte[]]@(0x80, 0xF4, 0x12) | Set-Content -Path "binary_data.bin" -Encoding Byte - 在CMD或PowerShell里运行程序时重定向输入:
.\your_program.exe < binary_data.bin
这个方法几乎适用于所有读取标准输入的程序,不管是文本模式还是二进制模式。
方法2:PowerShell管道直接传递
如果你的程序是二进制模式读取标准输入的,可以直接用管道把字节数组传过去:[byte[]]@(0x80, 0xF4, 0x12) | .\your_program.exe
但要注意:如果程序是文本模式读取(比如C里默认的cin、Python的input()),系统会把字节当成字符编码解析,可能会出现乱码或者数据丢失——这时候需要先把程序改成二进制模式读取输入(比如C里调用_setmode(_fileno(stdin), _O_BINARY);)。
方法3:模拟键盘输入(不推荐)
理论上可以用SendInput API写个小工具,或者用AutoHotkey脚本向控制台窗口发送对应字节的输入,但这种方法非常麻烦——因为很多二进制字节没有对应的键盘按键,而且容易受窗口焦点、编码设置的影响,远不如前两种方法可靠。
内容的提问来源于stack exchange,提问作者user8240761




