生成协议字符串

时间:2015-12-23 23:03:21

标签: python string

我想从一堆变量中读取组合信息。 我试过这个:

class MyStruct:
    first_byte = 0
    second_byte = 0
    combined = str(hex(first_byte)) + " " + str(hex(second_byte))

test = MyStruct() test.first_byte = 36 test.second_byte = 128

print("MyStruct: test first=%i second=%i comb=%s" %(test.first_byte, test.second_byte, test.combined))

我得到了:

  
    

>     MyStruct:先测试= 36秒= 128 comb = 0x0 0x0

  

但我在期待:

  
    

>     MyStruct:先测试= 36秒= 128 comb = 0x24 0x80

  

我看到它们的计算结合在声明时才进行。但我不知道如何再次计算它。

为什么我使用这个: 我想在CARBERRY上为LIN信号创建一个协议字符串 您可以在此处找到更多信息:LIN-command

我想像这样单独定义每个字节:

protokol.pid = 10
protokol.D0 = value_one
protokol.D1 = value_two

依旧......

1 个答案:

答案 0 :(得分:0)

嗯,简单地说就是combined = str(hex(first_byte)) + " " + str(hex(second_byte))行 在创建类时进行评估。 你能做的是以下几点:

class  MyStruct:
    def __init__(self, first_byte, second_byte):
        self.first_byte = first_byte
        self.second_byte = second_byte
        self.combined = hex(first_byte) + " " + hex(second_byte)


test = MyStruct(36, 128)
print("MyStruct: test first=%i second=%i comb=%s" %(test.first_byte, test.second_byte, test.combined))

我建议你在进一步研究之前先看看课程,方法和属性,你可以选择一些有用的工具。

进一步说明: 通过直接在类中声明first_byte和second_byte,您将创建由MyStruct.first_byteMyStruct.second_byte访问的静态类变量。这里有一个例子来说明我在谈论的内容:

>>> class A:
    tag = 10
    def set_tag(self, val):
        self.tag = val

>>> b = A()
>>> b.tag
10
>>> A.tag
10
>>> b.set_tag(5)
>>> b.tag
5
>>> A.tag
10