我有一个非常简单的跟随代码,从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,以便我可以完全控制缓冲区的值是什么?
编辑:我在一个我没有权限创建文件的系统上。
可悲的是,我已经坚持了一个星期了。非常感谢!。答案 0 :(得分:1)
首先,值得知道您的键盘可以发送32到126之间的所有代码。
要获取0到31之间的代码以及代码127,您可以在任何典型终端上使用以下方法,例如Linux上的gnome-terminal或Windows上的PuTTY:
首先,按Ctrl + V.这告诉终端将您输入的下一个内容作为文字字符发送。您现在可以键入以下任何内容:
这允许你在普通打字的过程中键入任何字符(低于128)(而gabber建议的printf
之类的程序)可以正常工作,但如果你想在你的前后正常打字,就不能使用它们特殊字符)。
要获得字符128及以上,如果您使用的是PuTTY,则可以将编码设置为CP437(或类似名称),然后从Wikipedia处的表中复制字符。在PuTTY之外,我不确定你是如何管理它的。
答案 1 :(得分:0)