2012-04-30 3 views
2

10 진수를 16 진수로 변환하려고합니다. 나는 이것에 대한 해결책을 찾았지만 Int 나 Long to Hex 만 찾을 수있다. 아래의 코드를 사용할 때 "서식 지정자가 유효하지 않습니다"라는 오류 메시지가 나타납니다. .NET 3.5에서 10 진수를 16 진수 (문자열)로 변환

Decimal decValue = 18446744073709551615 
    string hexValue = decValue.ToString("X"); 

는 또한 진수로 변환 한 다음 바이트 배열에 진수 변환을 검토 한 결과, 그러나 나는 또한에 짧게 간다.

+2

당신은 확장 메서드에 좋은 깔끔한을 마무리 할 수 ​​있습니까? – CodesInChaos

+0

왜이 작업을 수행 하시겠습니까? 234.567을 어떻게 표현하고 싶습니까? –

+0

'decValue'가 필수적이라면 간단히'BigInteger'로 던져서 ToString ("X")'를 호출하면됩니다. 하지만 그럴 경우, 처음에는'decimal' 대신'long' 또는'BigInteger'를 사용하는 것이 좋습니다. '((BigInteger) decValue) .ToString ("X")'는 당신의 예제에서 작동합니다. – CodesInChaos

답변

6

.NET 3.5를 사용하고 있으므로, .NET 2.0 이상에서 작동하는 IntX은 어떻습니까?

var intx = new Oyster.Math.IntX(decValue.ToString()); 
intx.ToString(16); 

System.Numerics를 사용하여 4.0 이상 .NET의 경우이 아닌 정수 일부를 무시 물론

Decimal decValue = 18446744073709551615; 
var bigValue = new BigInteger(decValue); 
bigValue.ToString("X"); 

(System.Numerics.dll을 포함해야합니다).

+0

과 같이 일부 기지의 유한 확장이 무한 할 수도 있습니다. BigInteger를 사용할 수 없으므로 .net 3.5로 작업하고 있습니다. 미안해, 내 게시물에서 분명히 했어야 했어. –

+0

.NET 2+ – yamen

+0

에 대한 해결책을 보여주기 위해 업데이트되었습니다. System.Numerics.dll을 언급 해 주셔서 감사합니다. 대부분의 대답은 중요한 비트를 남겨 둡니다. –

2

.NET 3.5를 사용하고 있으므로 손으로해야합니다.

public static class DecimalHelper { 
public static string ToHexString(this Decimal dec) { 
    var sb = new StringBuilder(); 
    while(dec > 1) { 
     var r = dec % 16; 
     dec /= 16; 
     sb.Insert(0, ((int)r).ToString("X")); 
    } 
    return sb.ToString(); 
    } 
} 

그럼 그냥 같이 호출 :이 아닌 필수`Decimal`s을 처리 할 어떻게

Decimal dec = 18446744073709551615; 
var hex = dec.ToHexString(); 
+1

나는 당신의 코드를 테스트하지 않았지만, 주석이 있어야하는 또 다른 대답은'while (dec> 1)'을'while (dec> 0)'으로 대체해야한다고 주장한다. – CodesInChaos

관련 문제