Java / C# - 정수의 부호 유무에 따른 16진수 문자열 변환
다른 언어와 협업을 하다 보니 재미있는 일이 발생합니다. ^^ 자바의 경우, toString으로 정수를 16진수로 변환하는 방법은 다음과 같습니다.
Long n = -3527423806509724337L;
System.out.println(Long.toHexString(n)); // cf0c12bcb0bb4d4f
재미있는 것은 부호를 유지한 체로 변환해주는 방법도 있습니다.
Long n = -3527423806509724337L;
System.out.println(Long.toString(n, 16)); // -30f3ed434f44b2b1
보시는 것처럼 부호 있는 16진수(signed integer in base 16)로 변환되었습니다.
그럼, 이 결과를 닷넷과 비교해 볼까요? ^^ 일단, 기본적인 ToString은 부호 없는 16진수(unsigned integer in base 16) 변환을 수행합니다.
long value = -3527423806509724337;
Console.WriteLine(value.ToString("x")); // cf0c12bcb0bb4d4f
하지만, 아쉽게도(?) ^^ 자바와는 달리 또 다른 진수 변환 방법에서도 동일한 결과를 보여줍니다.
long value = -3527423806509724337;
Console.WriteLine(Convert.ToString(value, 16)); // cf0c12bcb0bb4d4f
비록 닷넷에서는 그런 기능의 변환이 없지만 어찌되었든 다음과 같이 간단하게 맞춰줄 수는 있습니다.
long value = -3527423806509724337;
long negValue = -value;
Console.WriteLine("-" + negValue.ToString("x")); // -30f3ed434f44b2b1
그래도, 어찌되었든 문자열 길이로 봤을 때 부호 없는 16진수 결과가 1글자 더 짧아서 효율적이긴 하죠. ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]