2011-09-05 3 views

답변

10

당신은 절대적으로 sbyte[]byte[] A를 변환 할 수 있습니다 - 자바 코드가 정말 부호로 바이트 배열을 치료 될 것이라고 내가 할 수있는 거의 보증합니다.

그냥 byte[]로 변환하고 Convert.ToBase64String 전화 : (... base64로는 부호없는 바이트의 관점에서 정의입니다 아니면 다른 방법을 넣어).

sbyte[] x = { -1, 1 }; 
byte[] y = (byte[]) (object) x; 
Console.WriteLine(Convert.ToBase64String(y)); 

경우 : C 번호 자체가 둘 사이의 변환을 제공하지 않습니다하지만, CLR은 참조 변환을 수행하는 것은 매우 행복하다, 그래서 당신은 단지 C# 컴파일러를 속일 필요 - byte[]로 변환하는 것은 정말 쉽습니다 실제로

byte[] y = new byte[x.Length]; 
Buffer.BlockCopy(x, 0, y, 0, y.Length); 

을하지만, 개인적으로는 첫 번째 양식으로 다루고 싶어요 : 당신은 당신이 복사 할 수 정품byte[]을 갖고 싶어.

+0

빨리. 존 스턴 사실에 대한 링크를 누군가에게 던지십시오. 농담이야. 존경. – TigOldBitties

+0

Convert.ToBase64String은 이진 표현을 얻기 위해 포인터를 사용하기 때문에 의미가 있습니다 ... 그리고 그것은 패턴입니다 ... –

+0

@NoProblemBabe : 포인터는 솔직히 말해서 여기서는별로 중요하지 않습니다 ... –

5
class Program 
{ 
    static void Main() 
    { 
     sbyte[] signedByteArray = { -2, -1, 0, 1, 2 }; 
     byte[] unsignedByteArray = (byte[])(Array)signedByteArray; 
     Console.WriteLine(Convert.ToBase64String(unsignedByteArray)); 
    } 
} 
+0

미안하지만, 그 이중 캐스팅을 자주 사용하면 불일치 배열 유형에 대한 오류가 발생합니다. 특별히 nhibernate를 사용합니다. 하지만 고마워요 –

+0

나는 Array 클래스의 convertall 메서드를 보았습니다.이 메서드는 람다가 각 항목을 캐스팅 할 수 있습니다. –

관련 문제