From: Aaron Smith Date: 2007-03-08T13:36:38+09:00 Subject: ruby / php operator differences. I am trying to do some parsing of binary data. Here is the psuedo code that parses what i'm looking for: private int readInteger() throws IOException { int n = 0; int b = in.readUnsignedByte(); int result = 0; while ((b & 0x80) != 0 && n < 3) { result <<= 7; result |= (b & 0x7f); b = in.readUnsignedByte(); n++; } if (n < 3) { result <<= 7; result |= b; } else { /* Use all 8 bits from the 4th byte */ result <<= 8; result |= b; /* Check if the integer should be negative */ if ((result & 0x10000000) != 0) { /* and extend the sign bit */ result |= 0xe0000000; } } return result; } Here is how I wrote it with Ruby: def read_int n = 0; b = @input_stream.read_special(1,'C') result = 0 while((b & 0x80) != 0 && n < 3) result <<= 7 result |= (b & 0x7f) b = @input_stream.read_special(1,'C') n = n + 1 end if (n < 3) result <<= 7 result |= b else # Use all 8 bits from the 4th byte result <<= 8 result |= b #Check if the integer should be negative if ((result & 0x10000000) != 0) # and extend the sign bit result |= 0xe0000000 end end STDOUT.puts "READ INT: #{result}" return result end When translating the Pseudo Code to PHP, it's verbatim except for syntax. With ruby, I think i've found the problem with it not parsing correclty. the |= operator. With PHP $i |= 0xe0000000; //= -536870912 Now with Ruby: i |= 0xe000000 #= true Any ideas on a solution? thanks. -- Posted via http://www.ruby-forum.com/.