gregs@well.sf.ca.us (Greg Strockbine) (03/08/91)
I need some help with this one. I'm trying to write a perl script to interpret hex memory dumps. How do I deal with hex numbers and shifting and bitwise anding, I'm getting confused, I have perl 3.0, patch level 12, Vax 6420. I fed "B000" to a perl script that did something like this: $word = "B000"; print ($word & 0xF000) >> 12, "/n"; and I get 0. How come I didn't get B? Any help is greatly appreciated. greg strockbine, dataproducts, woodland hills, ca.
tchrist@convex.COM (Tom Christiansen) (03/08/91)
From the keyboard of gregs@well.sf.ca.us (Greg Strockbine): : : I need some help with this one. : :I'm trying to write a perl script to interpret hex memory dumps. :How do I deal with hex numbers and shifting and bitwise anding, I'm :getting confused, I have perl 3.0, patch level 12, Vax 6420. : :I fed "B000" to a perl script that did something like this: :$word = "B000"; :print ($word & 0xF000) >> 12, "/n"; :and I get 0. How come I didn't get B? You have two problems here. The first is you assigned $word the string "B000", instead of the numeric hex constant 0xB000; the string "B000" is numerically 0. This is related to the new question on the FAQ I posted yesterday. The second is that you have tricked the print operator into behaving like a function call. Or perhaps it's tricked you. :-) Remember: if it looks like a function call (as in having a paren ANYWHERE after it) then it will be treated as such. What you have is treated as follows: (print($word & 0xF000) >> 12), "\n"; Surely not what you want. Try this: $word = 0xB000; print(($word & 0xF000) >> 12, "\n"); or print +($word & 0xF000) >> 12, "\n"; Read the verbiage on page 79 of the book for details. This is certainly a common novice goof, although it's not listed as such. Maybe it should be on the FAQ? --tom