如何在Python中打印0xff字节?

时间:2016-11-26 19:27:21

标签: python python-3.x

我希望使用 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

我的问题:

  • 为什么Python打印0xc30xb3字节而不是0xff
  • 使用Python打印0xff的正确方法是什么(我希望获得与echo或Perl相同的结果)?

1 个答案:

答案 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'