我希望使用 Python 3.5.2 print
一些0xff
个字节来将它们传输到另一个程序中。我有一个简单的C程序,它从stdin
读取并以十六进制打印每个字符:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main () {
char *buffer = malloc(0x100);
fgets(buffer, 0x100, stdin);
for (int i = 0; buffer[i] != 0; printf("%x ", buffer[i++]));
}
如果我回显0xff
字节并将其传递到我的程序中,则会按预期显示字符(a
是因为换行符):
# echo -e "\xff\xff\xff\xff" | ./print-chars
ffffffff ffffffff ffffffff ffffffff a
我也可以使用Perl:
# perl -e 'print "\xff\xff\xff\xff"' | ./print-chars
ffffffff ffffffff ffffffff ffffffff
但是当我在python中尝试它时,结果是不同的:
# python -c 'print("\xff\xff\xff\xff")' | ./print-chars
ffffffc3 ffffffbf ffffffc3 ffffffbf ffffffc3 ffffffbf ffffffc3 fffffbf a
我的问题:
0xc3
和0xb3
字节而不是0xff
?0xff
的正确方法是什么(我希望获得与echo或Perl相同的结果)?答案 0 :(得分:-1)
其中一种方法是使用struct module将值打包成二进制字符串:
import struct
value = 0xFF
s = struct.pack('B', value)
print(s)
list_of_values = [255]*4
s = struct.pack('4B', *list_of_values)
print(s)
将给出下一个输出:
b'\xff'
b'\xff\xff\xff\xff'