代码之家  ›  专栏  ›  技术社区  ›  mrduclaw

Ruby到Python语法混乱

  •  3
  • mrduclaw  · 技术社区  · 14 年前

    我正在尝试将某人的Ruby代码转换为我的Python代码。最初的开发人员已经不在我们身边了,我不认识Ruby。他的大部分代码很容易理解,但是下面的一些语法让我很困惑。

    例子:

                    myTable = ''
                    myTable << [ 0, 1, 0, 0, 0, 300].pack('vvvvvv')
                    myTable [40, 4] = [41310005 - 5].pack('V')
    

    1)假设在第2行之后,myTable将保存一个由[]中指定的6个值组成的数组是否正确?那是吗 .pack() 类似于巨蟒 struct.pack ?

    2)在第三行之后,右边的值是否将存储在数组中的位置40,并且长度为4个字节?这是因为他很有趣,还是有特殊的意义?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Chuck    14 年前

    第二行你错了,不过奇怪的是,你是对的,它与 struct.pack . myTable 是一个字符串。 Array#pack() 返回压缩数据的字符串(非常类似 结构包 ) String#<< 向接收字符串追加字符串。第三行将索引40处的4个字节设置为 [41310000].pack('V') .

        2
  •  2
  •   Daniel Vandersluis    14 年前

    查看文档 Array#pack . 它将数组转换为二进制序列的字符串表示形式。 v 是“短、小尾数字节顺序”的指令,并且 V 是“长的、小的尾数字节顺序”。

    这个 << 当发送到 String 对象。不过,因为字符串在该点之前是空的, myTable 可能已立即初始化为 [0, 1, 0, 0, 0, 300].pack('vvvvvv') 相反。

    String#[m,n]= 替换索引中的子字符串 m m+n .

        3
  •  1
  •   AboutRuby    14 年前

    不,myTable是一个字符串(它被分配了一个字符串文本)。字符串(和数组)上的<<运算符是append运算符,因此您要向字符串追加字符串。pack方法返回一个字符串,在本例中是一个“短的、尾数小的字节顺序”字符串。它将是一个由6个短整数组成的字符串,不会以任何方式转换为ASCII,只是转储到字符串中。

    然后,这个整数字符串的一部分以其本机格式替换为pack中的另一个值,这将返回一个“long,little endian byte order”。它将被替换为字符串中40字节in,4字节long的位置。

    这是一些相当奇怪的代码。只需知道mytable是一个字符串,这个包以本机格式返回数字。