Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby To Python Syntax Confusion

I'm trying to convert someone's Ruby code into my Python code. The originally developer is no longer with us and I don't know Ruby. Most of his code is easy enough to follow, but some of the following syntax is tripping me up.

Example:

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

1) Am I correct to assume that after the 2nd line, myTable is going to hold an array of 6 values specified in the []'s? And is that .pack() similar to Python's struct.pack ?

2) After the third line, is the value on the right going to be stored at position 40 in the array and be 4 bytes long? Is the -5 in the []'s just him being fun or does that hold some special significance?

like image 915
mrduclaw Avatar asked Mar 17 '26 21:03

mrduclaw


2 Answers

You're wrong about the second line, though strangely you're right that it's similar to struct.pack. myTable is a string. Array#pack() returns a string of the packed data (much like struct.pack), and String#<< appends a string to the receiving string. The third line sets 4 bytes at index 40 to be the result of [41310000].pack('V').

like image 152
Chuck Avatar answered Mar 20 '26 09:03

Chuck


Take a look at the documentation for Array#pack. It converts an array into the string representation of a binary sequence. v is the directive for "Short, little-endian byte order", and V is "Long, little-endian byte order".

The << acts as concatenation when sent to a String object. Since the string is empty before that point, though, myTable could have been immediately initialized to [0, 1, 0, 0, 0, 300].pack('vvvvvv') instead.

String#[m,n]= replaces the substring from index m to m+n.

like image 38
Daniel Vandersluis Avatar answered Mar 20 '26 10:03

Daniel Vandersluis