Zangief Ief wrote: > Hi, > > I'm trying to unpack a string into network byte order (big-endian), such > as the following method: > > # Convert an 8-bit or 16-bit string to an array of big-endian words > # In 8-bit function, characters >255 have their hi-byte silently > ignored. > def str2binb(str) > bin = [] > mask = (1 << 8) - 1 > i = 0 > while (i < str.length * 8) > bin[i>>5] ||= 0 > bin[i>>5] |= (str[i / 8] & mask) << (32 - 8 - i%32) > i += 8 > end > bin > end > > But after using unpack("N*") method (according to > http://www.ruby-doc.org/core/classes/String.html#M000760), the result is > not exactly the same. For instance: > >>> str2binb("Abcdefghijklmnopqrstuvwxyz") > => [1096967012, 1701209960, 1768581996, 1835954032, 1903326068, > 1970698104, 2038038528] >>> "Abcdefghijklmnopqrstuvwxyz".unpack("N*") > => [1096967012, 1701209960, 1768581996, 1835954032, 1903326068, > 1970698104] > > Moreover, if I try "a".unpack("N*"), Ruby returns a void array... Better pad with null chars (\0) up to a multiple of 4 bytes if you want the same behavior. I guess unpack("N*") stops if there is not a full 4 chars. -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407