찾다

 >  Q&A  >  본문

stl - c/C++ 이진 연산에 대한 질문(그런데 좋은 라이브러리와 메서드 찾기)

저는 현재 많은 기능과 기능을 포함하는 바이너리 방식(예: LZ77 압축, 허프만 코딩 등)으로 데이터를 처리해야 하는 콘텐츠 압축과 관련된 프로젝트를 진행하고 있습니다.

하지만 제가 직접 해본 결과, C++는 상대적으로 포괄적인 이진 연산을 제공하지만 주로 이진 연산의 특정 데이터 유형(예: char)을 기반으로 하며 char은 기본적으로 8비트라는 사실을 발견했습니다. 매우 편리하고 많은 판단이 필요합니다.

표현이 명확하지 않거나 C++에 대한 이해에 문제가 있을 수도 있지만, 바이너리를 원활하게 처리할 수 있는 방법을 찾고 싶습니다... 아니면 더 쉽게 사용할 수 있는 라이브러리가 있나요?

이 분야에 경험이 있거나 조언을 해줄 수 있는 사람이 있나요? 도움이 된다면 개인적으로 감사의 마음을 담아 빨간 봉투를 보내드리겠습니다.

天蓬老师天蓬老师2728일 전803

모든 응답(2)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-06-05 11:13:09

    더 큰 문자 표현 범위를 원할 경우 wchar_t를 사용할 수 있습니다.
    메모리의 데이터를 임의의 비트부터 바이트로 시작하도록 설정할 수 있는 타입을 원한다면 절대 불가능합니다.

    하지만 가능합니다
    `nl=((arr[0]&c0)>>6);
    nh=((arr[1] &0x0f) << 2);
    n=nh|nl;`
    이전 바이트의 상위 2비트와 다음 바이트의 하위 4비트를 합쳐서 6자리 이진수로 만들어 봅시다

    회신하다
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-05 11:13:09

    이미 바이너리를 사용하고 있는데, 아직도 문자를 고려하고 계시나요?
    바이너리는 바이트만 고려해야 합니다. 그렇죠?
    압축 알고리즘은 입력 파일이 ASCII, UTF-8, UTF-16(LE/BE) 또는 GBK 등일 수 있으므로 문자를 고려하지 않는 경우가 많습니다. 그러나 최종적으로 분석해 보면 언어의 공통성은 통계에 일정한 법칙이 있다는 것입니다.
    예를 들어 영어에는 e가 자주 나오거나, is 같은 단어가 자주 나오거나, se, tor 같은 접사가 자주 등장합니다.
    압축의 기본 원리는 자주 나타나는 것을 표현하기 위해 가능한 한 적은 비트를 사용하고 중복성을 줄이는 것이므로 일반적으로 문자와는 관련이 없습니다.

    압축 알고리즘에 대해 자세히 알아보세요. LZ77/LZ78/Huffman은 모두 일반적인 압축 알고리즘이며 비트를 기반으로 합니다.

    C++로 돌아가서 C++에서는 컴파일 타임에 크기를 알 수 있어야 하지만(스택 할당 메모리는 컴파일러에 의해 결정됨) 입력 텍스트는 런타임에만 알 수 있으므로 이론적으로는 좋은 방법이 없습니다. 문자 집합과 텍스트 인코딩은 깊은 구렁텅이이므로 뛰어들지 않는 것이 좋습니다.

    비트 단위로 작업을 수행하려면 라이브러리를 직접 캡슐화하거나 사용할 수 있는 부스트 등의 라이브러리가 있습니다. 결국 CPU의 최소값은 1바이트이지만 CPU는 그 안의 모든 비트만 작동할 수 있습니다.

    회신하다
    0
  • 취소회신하다