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?
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').
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With