4

텍스트 입력을 구문 분석하고 일부 이진 인코딩 데이터를 생성하는 작은 도구를 작성해야합니다. 나는 더 높은 수준의 (선택적으로)보다 안전하고 표현력이 풍부하며 언어를 빨리 개발할 수 있도록 C와 같은 곳에서 멀리 떨어져있는 것을 선호합니다.적절한 고수준 언어로 이진 데이터 처리

이러한 종류의 작업에 주로 사용되는 언어는 파이썬이지만이 경우 바이너리 원시 데이터를 처리 할 때는 bignums, sign extension 등으로 승격되는 숫자에 매우주의하지 않으면 문제가 될 수 있습니다.

이상적으로는 이식 가능한 일관된 방식으로 이식 가능한 명명 된 비트 필드가있는 레코드를 갖고 싶습니다.

(내가 이미 마스터하고있는 언어로 그것을하는 것이 강점을 알고 있지만, 최적이 아니지만 새로운 것을 배울 좋은 기회라고 생각합니다.)

감사합니다.

답변

4

이상하게도 나는 얼랑가 적합하다고 생각합니다. 당신이 그들을 사용하고 싶지 않다면, 병렬 설비를 무시하고, 비트의 문자열을 아주 쉽게 처리 할 수있는 네이티브 기능을 가지고 있습니다. 문서 비트 구조 아래를 검사하십시오.

+0

어쨌든 Erlang을 배우려고 생각했기 때문에 완벽 할 수 있습니다 .-D BTW, 구문 분석은 어떨까요? 문자열 처리 또는 파서 생성기가 괜찮습니까? – fortran

+1

Joe Armstrong의 bool (Erlang을 배우려고한다면 매우 소중합니다) '엄밀히 말하면 Erlang에는 문자열이 없습니다. 문자열은 실제로 정수의 목록 일뿐입니다. ' 이것으로 나는 괜찮은 문자열 처리를한다고 결론을 내리지 만, 그렇지 않으면 여러분이 결정할 수 있습니다. 파서 생성기에 대해서는 단서가 없습니다. –

3

얼랭에 대한 투표가 두 번째입니다. 그 이상한 점에도 불구하고 바이너리 데이터의 비트 레벨 제어에 대한 탁월한 지원을 제공합니다. 조사해야 할 또 다른 언어는 PADS으로 ad hoc 데이터의 고속 처리를 위해 설계된 특수 용도 언어 (통신 업계의 언어)입니다. PADS가 바이너리 데이터를 지원한다고 생각하지만, 맹세 할 수는 없습니다.

2

파이썬에 머물고 싶다면 bitstring 모듈이 있습니다.이 모듈은 바이너리 데이터 처리의 어려움을 덜어줍니다.

임의의 바이너리 구조를 생성하고 구문 분석하는 것은 매우 간단하므로 얼랭 (Erlang)이 문제를 해결하지 못할 수도 있습니다.

0

IMP, 이미 알고있는 언어를 사용하는 것이 빠릅니다. 재미를 위해서 새로운 언어를 배우고 싶지 않은 한.

0

C 구조체는 이런 종류의 일을위한 주된 요소 중 하나입니다. 나머지 언어가 마음에 들지 않으면 C로 된 데이터 형식과 파이썬의 모든 액세스 코드를 정의하고 갭을 SWIG으로 연결하십시오. 나는 SWIG를 많이 사용하지 않았기 때문에 당신이 그것을 얼마나 잘 작동시킬 수 있을지 모른다. 파이썬에서 모든 코드를 수행 할 수 없다면 매우 작고 잘 정의 될 수 있으므로 C에 약간의 비트 (WriteStructToFile 등)를 넣을 수 있습니다.

+0

직렬화 된 형식에서 이식성 문제를 해결하지 못한다면, 여전히 올바르게 처리되도록 코드를 작성해야합니다. – fortran

+0

@fortran : IIRC C 구조체로 정의되는 파일 형식이 꽤 많습니다. 정렬을 1로 설정하면 컴파일러가 레이아웃을 혼란스럽게하는 많은 공간을 제공하지 않는다고 생각합니다. OTOH 저는 비트 필드로 그 일을하는 데 문제가 있다는 것을 상기합니다. – BCS

2

Ada는 데이터 유형이 인 표현 절의 형태로 설명 된 것과 같이 이러한 종류의 저급 데이터 표현을 훌륭하게 지원합니다. 휴대용 방식으로, (필요한 경우) 모든 데이터에 대한 정확한 배치와 정렬을 정의하는 것이 가능하다 표현 조항으로 http://www.adaic.org/standards/05rm/html/RM-13-5-1.html

예를

를 참조하십시오. 유사하게 성능 목적을 위해 예를 들어 표현을 변경하는 것이 매우 쉽습니다. 머신 어 드레서 블 워드 대 비트로 저장된 불린을 사용합니다.