No such thing as a small change PerlMonks

### Re: long integer to hexadecimal conversion

by Bloodnok (Vicar)
 on Oct 01, 2009 at 10:16 UTC ( #798587=note: print w/replies, xml ) Need Help??

I don't know for sure (as I've not used it in anger), but I'd guess that using unpack might be the way to go.

I've no doubt that the more learned members of the fraternity|(brother|sister)hood will enlighten us both...

A user level that continues to overstate my experience :-))
• Comment on Re: long integer to hexadecimal conversion

Replies are listed 'Best First'.
Re^2: long integer to hexadecimal conversion
by perl_fan (Novice) on Oct 01, 2009 at 10:27 UTC
tried unpack same result :(
The basic problem appears to be that you have a 32 bit machine and you need a bigger integer than can be represented in 32 bits.

If you have 4 bits, the biggest unsigned number that you can represent is with all 4 bits "on", is, "1111", or 15 in decimal, 2**4-1=15, or 'F'. 0123456789ABCDEF is all 16 possibilities with 4 bits.

The biggest unsigned 32 bit number is 2**32-1= 4,294,967,295.

The normal convention for representing a "signed" number is what is called 2's complement arithmetic. If you have 4 bits and have say 0001, to get "-1", you complement (reverse) all bits and then add one. 1110+1=1111. Now we come to the interpretation of whether "1111" means "15" or "-1". Basically the most significant bit becomes the "sign bit". 0111 with 4 bits is the max positive number or 2**3-1=7. 1000 is the max negative number which weirdly enough is -8.

So if you have 32 bits as signed 2's complement, you get "0111 1111 1111 1111 1111 1111 1111 1111" or 2,147,483,647 as the max positive number and -2,147,483,648 as the max negative number.

I think a Perl float uses more than 32 bits for the "mantissa". I think it maybe as many as 53 bits. I'm not sure. I think the "safest" way is to use these big int modules. The 32 bit integer to think about is 2 billion. When you get to that size integer number, things can get more complicated.

123,143,230,627 is a lot bigger than 2,147,483,647 and hence the problems.

Create A New User
Node Status?
node history
Node Type: note [id://798587]
help
Chatterbox?
 [Corion]: choroba: Yeah, but handing off the request to Dancer,Plack, Mojolicious,LWP is easy once I have the data filled into some structure ;)) [Corion]: choroba: I'm using that to generate the permutations, but I don't know how the user can pass the intended values to my function in a sane way [Corion]: I have a prototype that permutes the get_parameters, but the values used for the get parameters should be different from the values used for the headers and potentially for parts of the URL [Corion]: But yes, in general, my approach will be "split the URL into another set of parameters, generate an array of allowed values for each parameter and then NestedLoops() over the set" [choroba]: hmm... so you need something like bag from Test::Deep, but not for checking, but for generation [Corion]: This has the dual use of easily requesting sequential URLs and also being suitable for testing [Corion]: For testing, I want to skip all tests with the same value(s) once one test fails to cut down on the number of failing tests [Corion]: choroba: Yes, in a way I [Corion]: ... I'm treating the incoming value sets as bags... Maybe I'll just put the burden on the user, at least in the first attempt at a full API. generate( headers => [{ 'Content-Type' => 'text/plain' }, {'Content-Type' => 'text/json' ] ), even ...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2017-01-17 08:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Do you watch meteor showers?

Results (152 votes). Check out past polls.