2012-06-07 8 views
1

저는 C#의 오디오 라이브러리에서 작업 중이며 WAVE 파일 형식의 ATM에서 작업 중입니다. 매우 유익한 website에 따르면, 파스칼 스타일 문자열을 사용하여 WAVE를 사용하고 있습니다. 저는 20 분 넘게 인터넷 검색을하고 있으며 C to Pascal converter 만 있습니다. 내가 파일을 구문 분석 System.IO.BinaryReader을 사용하고, 도움이된다면C#의 파스칼 문자열

char *cStr = "Test"; // C - produces {'T', 'e', 's', 't', '\0'} 
char pascal[] = {4, 'T', 'e', 's', 't'}; // Pascal 

:

나는 파스칼과 C 문자열 (C 코드)를 비교하는 방법을 알고있다.

+1

위의 정보가 주어지면 무엇이 문제입니까? :) '\ 0'으로 파스칼 문자열을 끝내는 것을 상상해보십시오. "C 문자열"은 파스칼 문자열의 두 번째 문자에 대한 포인터입니다 ... ("안전하지 않은 경우") –

+0

* 키 차이를 제공했습니다. 게시물 *에서 : 그래서 "나를위한 코드 작성"을 제외한 질문은 무엇입니까? –

+0

@pst 변환 방법을 모르겠습니다. –

답변

2

:-) 있는지 그렇지 않은 255 자입니다 확인하기 위해 입력 문자열 길이를 확인합니다.

var size = rd.ReadByte(); 
var body = rd.ReadBytes(size); 
var text = System.Text.Encoding.ASCII.GetString(body); 
+0

대기. 그게 다야? 나는'.GetString (...)'배열의 끝에 null 문자가 필요했지만. 오 잘. 라이브로 배우십시오. –

+0

D' oh. 나는 잘못 읽고 파스칼 문자열을 작성하는 데 중점을 두었습니다. 좋은 해결책. –

1

파스칼 문자열의 기본 개념은 첫 번째 바이트가 문자열 길이를 보유하고 후속 바이트가 문자열 데이터를 보유한다는 것입니다 (문자열을 255 자로 제한).

바이트 배열로 작업하고 C#의 바이트 변환 방법에 문자열을 사용하여 채 웁니다. C# 문자열을 바이트 배열로 변환하는 방법을 이해하려면 아래 질문의 대답을 읽고 문자열 길이를 유지하고 0 번째 바이트를 채우는 것을 잊지 말고 1 번째 배열 위치를 모두 0 바이트 오프셋 할 것을 기억하십시오 실제의 캐릭터 라인의 길이 당신은 꽤 쉽게해야 BinaryReader이를 사용하는 경우 잘

How do I get a consistent byte representation of strings in C# without manually specifying an encoding?

+0

크기가 7 비트 가변 길이 여야합니다. 문자열을 255로 제한하는 것은 다소 임의적으로 보입니다. – ChaosPandion

+0

@ChaosPandion 2 바이트로 확장한다는 소문이있었습니다. 가변 길이를 사용하지 않는 파스칼과 그 형식을 사용하는 C는 또한 가장 나쁜 2 바이트 실수 인 것으로 보입니다. –

+0

@ChaosPandion : 어쩌면 그렇게 보일 수도 있지만 그렇지 않습니다. 형식은 파스칼을 구조화 프로그래밍을위한 교습 언어로 사용하려는 의도로 오래 전에 정의되었습니다. –