Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Bitwise manipulation Re:

From: joel:neely:fedex at: 11-Oct-2000 10:50

Hi, Phil... [Philip--Hayes--btcellnet--net] wrote:
> An interesting one ... > > I have a integer value that I must convert to binary: > > Nice and easy for values <= 127 > > int1: 56 > > b1: to-binary to-block int1 > > HOWEVER, if int1 is greater than 127, say 2037, I have to perform the > > following task: > > 2037 which is equivalent to 0000100001011000 must be split into 2 bytes as > > follows > > b1: -> 00001000 effectively b1: to-binary to-block 8 > > b2: -> 01011000 effectively b2: to-binary to-block 24 > > Any suggestions.. >
Two suggestions: 1) Try using big-endian: func [n [integer!] /local r] [ r: copy #{} until [ insert r to-binary to-char (n // 256) 0 = n: to-integer n / 256 ] r ]
>> big-endian 56
== #{38}
>> big-endian 2037
== #{07F5} However, *DANGER, WILL ROBINSON!*, 1.1) This assumes byte order for values requiring more than 8 bits. 1.2) It breaks for negative values! (Explaining why and proposing a repair are left as exercises for the reader... ;-) 2) Check your math. Last time I looked, 2037 was odd, which means that its binary representation MUST end in a one! ;-) -jn- -- ; Joel Neely [joel--neely--fedex--com] 901-263-4460 38017/HKA/9677 REBOL [] print to-string debase decompress #{ 789C0BCE0BAB4A7176CA48CAB53448740FABF474F3720BCC B6F4F574CFC888342AC949CE74B50500E1710C0C24000000}