Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# string.GetHashCode() returns non int result

Tags:

c#

.net

One of my clients had an app crash and i traced it due to this bug/feature i can't really explain.
The WindowsIdentity.GetCurrent().Name.GetHashCode() returns this string: - ?2097695743
Yes, that a minus, a space, a question mark and then the actual hash numbers.

This is the code of a simple console app that show the weird behaviour.

static void Main(string[] args)
{
    Console.WriteLine("From String: string name = WindowsIdentity.GetCurrent().Name");            
    string name = WindowsIdentity.GetCurrent().Name;
    Console.WriteLine("name:                            " + name);
    Console.WriteLine("name.GetHashCode().GetType():    " + name.GetHashCode().GetType());
    Console.WriteLine("name.GetHashCode():              " + name.GetHashCode());
    Console.WriteLine("name.GetHashCode().ToString():   " + name.GetHashCode().ToString());
    Console.WriteLine();
    Console.WriteLine();
    Console.WriteLine("Direct");
    Console.WriteLine("WindowsIdentity.GetCurrent().Name:                           " + WindowsIdentity.GetCurrent().Name);
    Console.WriteLine("WindowsIdentity.GetCurrent().Name.GetHashCode().GetType():   " + WindowsIdentity.GetCurrent().Name.GetHashCode().GetType());
    Console.WriteLine("WindowsIdentity.GetCurrent().Name.GetHashCode():             " + WindowsIdentity.GetCurrent().Name.GetHashCode());
    Console.WriteLine("WindowsIdentity.GetCurrent().Name.GetHashCode().ToString():  " + WindowsIdentity.GetCurrent().Name.GetHashCode().ToString());
    Console.WriteLine();
    Console.WriteLine();
    Console.WriteLine("Press Enter to continue");
    Console.ReadLine();
}

This is the text output:

From String: string name = WindowsIdentity.GetCurrent().Name
name:                            COMMARC\tje
name.GetHashCode().GetType():    System.Int32
name.GetHashCode():              - ?2097695743
name.GetHashCode().ToString():   - ?2097695743

Direct
WindowsIdentity.GetCurrent().Name:                           COMMARC\tje
WindowsIdentity.GetCurrent().Name.GetHashCode().GetType():   System.Int32
WindowsIdentity.GetCurrent().Name.GetHashCode():             - ?2097695743
WindowsIdentity.GetCurrent().Name.GetHashCode().ToString():  - ?2097695743


Press Enter to continue

And this is a picture of the same output:

Weird GetHashCode return value

My question is: How on earth is this possible?

UPDATE: the problem was with the funky windows settings for negative numbers.

like image 630
Mladen Prajdic Avatar asked Nov 03 '11 21:11

Mladen Prajdic


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.

What is C full form?

Full form of C is “COMPILE”.

Why is C named so?

Because a and b and c , so it's name is C. C came out of Ken Thompson's Unix project at AT&T. He originally wrote Unix in assembly language. He wrote a language in assembly called B that ran on Unix, and was a subset of an existing language called BCPL.


1 Answers

If that is the output on the client's computer (but not yours or ours), it's possible the user's machine has specifically configured windows to use "- ?" as the numeric negative symbol. Windows is perfectly willing to let you do that, or any other weird formats.

As a test, I just configured Windows on my machine to use "- ?", and running a simple console app like yours output goofy formatted negative numbers just like your example output. If that's the case on your client's machine, there is nothing wrong with the operation of GetHashCode, it's just an artifact of Windows formatting.

like image 136
hatchet - done with SOverflow Avatar answered Nov 02 '22 17:11

hatchet - done with SOverflow