Solved

Compare Hex to char in If Statement

Posted on 2007-11-19
15
1,279 Views
Last Modified: 2010-05-18
I am trying to use a char to a hex in an if statement:

if (Convert.ToByte(ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1)) < 0x41)
{
        //---//
}

But I keep getting "Input string was not in a correct format."
0
Comment
Question by:SaltyDawg
  • 9
  • 5
15 Comments
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20315199
the problem is in the conversion, not in the comparison:

Convert.ToByte(ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1))

What does ItemIndexNumber contains? It should have some non-decimal number
0
 
LVL 1

Author Comment

by:SaltyDawg
ID: 20315260
Yes, I've just determined the problem is not the comparison, so I've got that much. But as you said its in the conversion and I can't figure that out.

ItemIndexNumber contains a string value (example "50009912000000001B")

What do you mean non-decimal number?
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20315436
For this value:
50009912000000001B

ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1))
is:
0009912000000001B

I suspect to want to do this:
ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 0))
with result:
50009912000000001
 
anyway, this number is too big to convert to a Byte
0
Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

 
LVL 1

Author Comment

by:SaltyDawg
ID: 20315458
Actually I'm was just trying to get "B" the last character.
0
 
LVL 1

Author Comment

by:SaltyDawg
ID: 20315679
I can manage to get "B" with:

if (Convert.ToInt32(ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1)) < 0x41)

But again I can't get the conversion right. I've tried all the Ints and related Coversions.
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20315688
Sorry, just noticed. There are other issues:

"B" cannot be converted by:
Convert.ToByte(somenumber)
You should use:
Convert.ToByte(somenumber,16)
0
 
LVL 1

Author Comment

by:SaltyDawg
ID: 20315726
I was not sure if Convert.ToByte is what I was supposed to use, can you clarify that?

Whatever I need to make this if statement work:

if (Convert.ToInt32(ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1)) < 0x41)
{

}

0
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 500 total points
ID: 20315804
You should use the 2 argument version, to specify that the number is hexadecimal:

if (Convert.ToInt32(ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1), 16) < 0x41)
{
}
0
 
LVL 7

Expert Comment

by:photowhiz
ID: 20316524
Why not do this:

if (ItemIndexNumber[ItemIndexNumber.Length - 1] < 'B')
0
 
LVL 1

Author Comment

by:SaltyDawg
ID: 20319355
photowhiz,
Wouldn't that make it an array? What I am trying to do is find the value for "B" then do a comparison statement with the hex value of 0x41.
0
 
LVL 1

Author Comment

by:SaltyDawg
ID: 20319568
You should use the 2 argument version, to specify that the number is hexadecimal:

if (Convert.ToInt32(ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1), 16) < 0x41)
{
}

Thanks Jaime, that makes sense now, and it works.
0
 
LVL 1

Author Comment

by:SaltyDawg
ID: 20319584
Look for my name again I'm sure I'll have more C# questions as I make this switch from C++ and Java.
0
 
LVL 1

Author Comment

by:SaltyDawg
ID: 20323029
FYI

I actually went through all that when all I had to do was this:

            if (Convert.ToChar(ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1)) < 0x41)
            {
                is_probe = false;
            }
            else
            {
                is_probe = true;
            }

while ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1) = "A"

I was orginally trying to compare 0x41 to "A" as a string, but I was getting errors because I could only compare 0x41 to 'A' as a string.
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20323096
indeed it is 'A' as a character, as far as Convert.ToChar() returns a character too.
I am not sure what are you trying to do but your code could be simpler:

is_probe =  !(Convert.ToChar(ItemIndexNumber.Substring(ItemIndexNumber.Length - 1, 1)) < 0x41);
0
 
LVL 1

Author Comment

by:SaltyDawg
ID: 20323185
Wow thanks again, that works.
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary: Persistence is the capability of an application to store the state of objects and recover it when necessary. This article compares the two common types of serialization in aspects of data access, readability, and runtime cost. A ready-to…
We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

813 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now