문제

바이트 어레이 (길이 4)를 정수로 변환하는 가장 좋은 방법이 VB.net에 무엇이 있는지 궁금합니다. BitConverter를 알고 있지만 4 바이트의 메모리를 복사하여 수행 할 수있는 작업을 수행하기 위해 기능 호출을하는 것은 상당히 낭비 인 것 같습니다. 같은 라인을 따라 이진 표현에서 단일/이중을 단일/이중 변수로 변환하는 것은 어떻습니까?

도움이 되었습니까?

해결책

"메모리의 복사"는 .NET이 특별히 적합하지 않은 것입니다 (vb.net은 훨씬 적습니다). 따라서 C로 전환하는 것이 옵션이 아니라면 기능 호출은 거의 피할 수 없습니다.

비트 컨버터는 잘 생각되고 테스트 된 기능입니다. 물론 (C#)와 같은 일을함으로써 피할 수 있습니다.

myInt = (*pbyte) | (*(pbyte + 1) << 8)  | (*(pbyte + 2) << 16) | (*(pbyte + 3) << 24);

(우연히도 바로 그거죠 바이트 배열을 정수로 변환 할 때 Bitconverter가 당신에게하는 일 ...).

그러나이 코드 :

  • 비트 컨버터보다 읽고 이해하기가 훨씬 어렵습니다.
  • 비트 컨버터가 당신을 위해하는 오류를 확인하지 않습니다.
  • Bitconverter와 마찬가지로 Little-Endian 및 Big-Endian 표현을 구별하지 않습니다.

다시 말해 : 함수 호출을 "저장"할 수는 있지만 결국 버그를 소개하지 않는다고 가정하더라도 결국 훨씬 나빠질 것입니다. 일반적으로 .NET 프레임 워크는 매우 잘 설계되었으며 실제 (성능) 문제가 발생하지 않는 한 기능을 사용하는 것에 대해 두 번 생각해서는 안됩니다.

다른 팁

BitConverter를 알고 있지만 4 바이트의 메모리를 복사하여 수행 할 수있는 작업을 수행하기 위해 기능 호출을하는 것은 상당히 낭비 인 것 같습니다.

반면에 나는 상황을 "내가 원하는 것을 정확하게 수행하는 메소드 호출이있을 때 효율적인 방법을 직접 코딩하려는 낭비로 보인다"고 생각합니다.

당신이 아니라면 절대적으로 확신했습니다 이 정확한 코드에 성능 병목 현상이 있으므로 프레임 워크에서 제공하는 기능을 사용하십시오.

MDB는 정확히 정확하지만, 여기에는 VB 바이트 배열을 Little Endian Integer로 변환하는 코드가 있습니다 ... (자신의 Bitconverter 클래스를 작성하려는 경우).

'비트 ()가 길이 4의 바이트 배열 인 곳

Dim i as Integer 

i = (((bits(0) Or (bits(1) << 8)) Or (bits(2) << &H10)) Or (bits(3) << &H18))

System.Buffer 클래스를 사용하여 복사 바이트 []로 int []를 차단할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top