【发布时间】:2014-09-30 21:03:22
【问题描述】:
我有一个非常简单的以下代码,它从stdin 获取 4 个字节并以十六进制格式逐字节打印出来。
// Code may be different but the point is to input any byte value 0 to 255 from stdin
int main(int argc, char** argv) {
char buffer[4];
read(0, buffer, 4); // or gets(buffer)
int i;
for(i = 0; i < 4; i++) {
printf("%x", buffer[i]);
}
}
我遇到的问题是我受限于我可以通过键盘输入的内容,所以我无法向stdin 提供任何字节。例如,如果我正在处理 ACSII,则无法给出 0x11,因为 ASCII 0x11 是键盘没有的 Device Control 1 (oft. XON)。如果我处理 UTF-8,我会遇到更多问题,因为字符不使用完整的字节范围(它上升到 0x7f 并开始使用 2 个字节)。
我正在寻找 C 风格字符串中的 "\x11\x11\x11\x11" 或 C 中的 0x11111111 等常量格式。
有什么方法可以将任何字节 0-255 提供给标准输入,以便我完全控制缓冲区的值?
编辑:我在一个没有权限创建文件的系统上。
可悲的是,我已经坚持了一周了。非常感谢!
【问题讨论】:
-
根据您的操作系统,您可以将文件重定向到 STDIN,并将您的字节序列放在那里。
-
将其写入文件并将进程的输入重定向到所述文件?例如
./a.out <file.txt -
@bstamour。不幸的是,我在一个没有权限制作文件的系统上。我尝试了类似 ./a.out
标签: stdin