문제

나는 프로젝트에서 작업하고 거래에서의 바이트 수준 정수입니다.때문에 공간을 절약하는 주요 고려 사항,나만 필요가 매우 작은(가변 길이 수).

이 있는 방법을 설정할 수 있습 int'4096'으로 3 바이트는?또는'1053'으로 2 개의 바이트는?

분명히 내가 cna 수동으로 할=(byte[0]*256)+(byte[1]),궁금하지만 있으면 쉽게 변환하는 옵션을 int 로 바이트 x 에 다시 다시?

도움이 되었습니까?

해결책

당신이 할 수 있습니까?확실합니다.그것은 저장을 어떤 공간이 있나요?어쩌면 방법에 따라 많은 작업하려는 않습니다.을 이해하는 프로세서 32 비트,그것을 의미하는 4 바이트를 등록,그래서 어떻게 그것을 저장하고 접근 것들입니다.을 강제로 3 바이트"int"당신은 그것을 유지하는 바이트 배열하고 추출 그것은 배열로부터를 정렬된 주소를 사용하기 전에.는 것을 의미를 저장하는 경우 그것은 짧은 컴파일러는거나 패드 그것을 밖으로(그리고 당신은 잃는 어떤 효율성을 만들어진)또는 될 것입니다 느린을 읽기 및 쓰기.

이 데스크톱 응용 프로그램입니다,얼마나 정확하게 공간을 절약하는 주요 고려 사항,특히 이야기 할 때는 1 바이트를 당를 받으려면 어떻게 해야 합니까?성능벌 요소에 대한 액세스를 변경될 수 있습을 마음는 방법에 대한 중요한 중 하나는 바이트입니다.

나고 주장하는 경우에는 1 바이트이 진정으로 중요하다,어쩌면 당신은 잘못된 언어를 사용하여 어쨌든.바이트 수를 당신이 저장되지 않을 설치하고 사용하 CLR 에서 첫 번째 장소 사람들의 바이트입니다.

Side note:당신은 또한 수행,변화지 않는 곱셈(그러나 컴파일러는 가능성이 얻을 거기 당신을위한).

다른 팁

다만에 대한 추가 정신,그것을 보자를 사용하여 C#에서 오래 된 C-style union 트:

[StructLayout(LayoutKind.Explicit)]
struct OddUnion
{
    /* The 32-bit integer value */
    [FieldOffset(0)]
    public int IntegerValue;

    /* The bytes that overlap with it */
    [FieldOffset(0)]
    public byte Byte1;
    [FieldOffset(1)]
    public byte Byte2;
    [FieldOffset(2)]
    public byte Byte3;
    [FieldOffset(3)]
    public byte Byte4;
 }

그리고,하고 싶을 때"convert"려면 다음을 수행합니다.

OddUnion myOddUnion;
myOddUnion.IntegerValue = 4096;
Byte secondByte = myOddUnion.Byte1;

하지만 정말 도움만을 찾으면"save"비용의 비트 시프트 밖으로 한 바이트에서는 단어입니다.나는 보지에서 생성되는 SMIL,그래서 내가 여부를 알 수 없이 어떤 비해 저렴하는 다른 솔루션입니다.

당신이 할 수 있는 가변 길이 정수로 인코딩이 있습니다.기존의 방법에서 몇 년 전이었을 사용하여 높은 비트의 각각의 바이트를 나타내는 정수를 계속하여 다른 바이트입니다.그래서 당신은 잃고 당 하나의 비트를 바이트,하지만 얻은 정수입니다.이것은 주로 유용한 영구 저장소에는 모든 마지막 바이트 계산합니다.

예제:가정하에 우리는 다루고 있호 정수,리

int  binary
0                       00000000
1                       00000001
...  
127                     01111111
128            00000001 10000000
129            00000001 10000001
...
255            00000001 11111111
256            00000010 10000000
...
16383          01111111 11111111
16384 00000001 10000000 10000000 

그래서 0-127 의 1 바이트 및 128-16383 2 바이트,등등....

더 복잡한 방법이 확인 이 페이지

BitConverter.GetBytes 을 얻을 것이다 당신의 바이트입니다.

BitConverter.ToInt32 당신을 얻을 것이 32 비트 int 에서 바이트입니다.

당신이해야 할 약간 변하고 있다.그것은 훨씬 easir 과 함께 작업하는 경우 진수,이후 매번호(내 말은 모든 자리지만,그 자리에 대한 기본 10,hexgit)네 나타냅니다.

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