我正在尝试通过以下方式重定向 PowerShell 中的输入:
Get-Content input.txt | my-program args
Run Code Online (Sandbox Code Playgroud)
问题是管道 UTF-8 文本前面有一个 BOM (0xEFBBBF),我的程序无法正确处理它。
一个最小的工作示例:
// File: Hex.java
import java.io.IOException;
public class Hex {
public static void main(String[] dummy) {
int ch;
try {
while ((ch = System.in.read()) != -1) {
System.out.print(String.format("%02X ", ch));
}
} catch (IOException e) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在 PowerShell 中:
javac Hex.java
Set-Content textfile "ABC" -Encoding Ascii
# Now the content of textfile is 0x41 42 43 0D 0A
Get-Content textfile | java Hex
Run Code Online (Sandbox Code Playgroud)
或者干脆 …
例如,这样的代码可能很有用:
unsigned char ch = 0xf2;
printf("%02hhx", ch);
Run Code Online (Sandbox Code Playgroud)
但是,在作为可变参数函数的参数传递时ch被提升为。所以当使用时,存在类型不匹配。根据 C 标准,这里是否涉及任何未定义的行为?如果是C++呢?intprintf%hhx
这里有一些讨论,但没有给出答案。