convert signed int to unsigned int

Hey Experts,
How do I convert a number represented as a string from a text box to unsigned. For example, the number in the text box is -492961707.
freenameAsked:
Who is Participating?
 
dstanley9Connect With a Mentor Commented:
It depends on how many bits were used to represent the number on the original system.  The negation of an unsigned int will be different for each:

uint ui = (uint)unchecked(i);  // returns 3802005589 (0xe29e0055)
ulong ul = (ulong)unchecked(i);  // returns 18446744073216589909  (0xffffffffe29e0055)

If the code represents some type of 32-bit structure with a combination of flags and numbers, it is probably a 32-bit code based on your example.  COM errors, for example, are translated to negative 32-bit signed integers becuase the leftmost bit is always 1 for errors to indicate a failure (http://windowssdk.msdn.microsoft.com/en-us/library/97e68708-eb62-4481-af03-cf8b80304103.aspx).

0
 
dstanley9Commented:
Do you want to convert it to 492961707 or the unsigned equivalent (base-2 inverse)?
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:

int n = int.Parse(textbox.text)
uint u = unchecked(n < 0 ? -n : n);
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
dstanley9Commented:
Depending on if you want the 32-bit equivalent or 64-bit equivalent,

try
            Int64 i = -492961707;
            String s = i.ToString("x");
            u = UInt64.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier);

or

            Int32 i = -492961707;
            String s = i.ToString("x");
            u = UInt32.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier);
0
 
dstanley9Commented:
Angel,

Very slick!  But wouldn't it just be

int n = int.Parse(textbox.text)
uint u = (uint)unchecked(n);
0
 
gregoryyoungCommented:
dstanley don't be too impressed it is googled :) from http://www.flounder.com/csharpfactoids.htm

Generally one should use Math.Abs ... there is 1 number it will fail for -2147483648 (due to overflow) which is why the unchecked solution posted is mentioned ... if this one number doesn't matter to you then it is a much cleaner answer and does a better job expressing what you are trying to do.

int n = int.Parse(textbox.text)
uint foo = (uint) math.abs(value)


Cheers,

Greg
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
>don't be too impressed it is googled
I admit to be culprit on that point :-)
0
 
freenameAuthor Commented:
Everyone,
I see some very good solutions here. But I don't think I was clear enough on my original request. My apologies. From what I understand (I'm getting this information second hand),  the number originates on a system that uses unsigned numbers. Then it is delivered (the means is unimportant) to a system that has signed numbers. Therefore, when represented on the new system, the negative sign may be present, as in this case, because the signed bit is set. I would like to know what the original number was on the system the uses unsigned numbers. Is this possible?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.