c - 将十六进制输入 argv[1]

标签 c linux hex

我有一个从 argv[1] 获取输入的程序,所以我像这样运行它

./myProgram Hello

但是我需要输入十六进制而不是十进制/文本,比如

./myProgram \x48\x65\x6c\x6c\x6f

但程序将其作为文本而不是构成单词 Hello 的十六进制。

我不能

python -c "print '\x48\x65\x6c\x6c\x6f'" | ./myProgram 

因为程序把里面的数据作为argv[1]

我该如何解决这个问题? (我不能修改程序)

最佳答案

继续评论,由于不知道 ./myProgram 中的确切内容,因此有点难以猜测,但根据您报告的内容,有几项合乎逻辑的尝试。

正如您所指出的,您需要将十六进制输入作为 ./myProgram 的第一个参数,而不是将其传递给 stdin 上的程序。您正确地注意到 python -c "p​​rint '\x48\x65\x6c\x6c\x6f'"| ./myProgram 由于这个原因而失败。如您所知,管道 到程序会将初始进程的stdout 重定向到后续进程的stdin,而不是作为它的参数。

这就是进程替换 可以提供帮助的地方。在 $(...)(或 backticks '...' 中的旧格式)中放置进程时,程序返回。因此,您可以通过以下方式提供 python -c "p​​rint '\x48\x65\x6c\x6c\x6f'" 的输出作为参数:

./myProgram $(python -c "print '\x48\x65\x6c\x6c\x6f'")

最后,如果 myProgram 只是在寻找字符串格式的十六进制输入,那么就没有理由进行多次转义。简单地提供十六进制数的字符串表示可能就足够了。类似于以下内容:

./myProgram 0x48656c6c6f

我很高兴其中一个建议是您需要的“银弹”。祝你使用 shell 好运。如果您有任何其他问题,请告诉我们。

关于c - 将十六进制输入 argv[1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43084894/

相关文章:

c++ - mkdir in/tmp 不工作 : "Permission Denied"

android - 获取互联网IP地址

xml - 使用 xmllint 返回多个结果

.net - 将 .Net 颜色对象转换为十六进制代码并返回

php - Python 相当于 php 包

c - 在 Linux 内核 2.6.32 或更高版本中,每个 net_device 的私有(private)数据存储在哪里?

c - C 预处理指令是否属于 C 编程语言?

c - 在 24 位 rgb 位图中填充

c - 英特尔和 GNU C 编译器在向量化方面自相矛盾

javascript - 将 Unicode 字符转换为十六进制会导致额外字节