我是Python新手。在Perl中,要将特定位设置为标量变量(整数),我可以使用vec()
,如下所示。
#!/usr/bin/perl -w
$vec = '';
vec($vec, 3, 4) = 1; # bits 0 to 3
vec($vec, 7, 4) = 10; # bits 4 to 7
vec($vec, 11, 4) = 3; # bits 8 to 11
vec($vec, 15, 4) = 15; # bits 12 to 15
print("vec() Has a created a string of nybbles,
in hex: ", unpack("h*", $vec), "\n");
输出:
vec() Has a created a string of nybbles,
in hex: 0001000a0003000f
我想知道如何在Python中实现相同的功能,而无需编写位操作代码并手动使用struct.pack?
答案 0 :(得分:0)
不确定vec功能在珍珠中是如何工作的(没有使用vec功能)。但是,根据您提到的输出,python中的以下代码工作正常。我没有看到第二个论点的重要性。以这种方式调用vec函数:vec(值,大小)。每次执行此操作时,输出字符串将连接到全局final_str变量。
final_vec = ''
def vec(value, size):
global final_vec
prefix = ''
str_hex = str(hex(value)).replace('0x','')
str_hex_size = len(str_hex)
for i in range (0, size - str_hex_size):
prefix = prefix + '0'
str_hex = prefix + str_hex
final_vec = final_vec + str_hex
return 0
vec(1, 4)
vec(10, 4)
vec(3, 4)
vec(15, 4)
print(final_vec)
答案 1 :(得分:0)
如果你真的想从半字节创建一个十六进制字符串,你可以这样解决它
nibbles = [1,10,3,15]
hex = '0x' + "".join([ "%04x" % x for x in nibbles])