Python相当于perl vec()函数

时间:2013-12-10 02:09:54

标签: python perl

我是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?

2 个答案:

答案 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])