문제

정확히 : 문자열 길이는 바이트 크기와 같습니까? 언어에 중요합니까?

나는 그것이 생각하지만, 나는 단지 확실하게하고 싶다.

추가 정보 : 일반적으로 궁금합니다. 내 특정 상황은 MySQL과의 PHP였습니다.

대답은 아니오이므로 그게 내가 알아야 할 전부입니다.

도움이 되었습니까?

해결책

아니요. 0 종료 문자열에는 하나의 여분의 바이트가 있습니다. Pascal String (Delphi Shortstring)에는 길이에 대한 여분의 바이트가 있습니다. 유니 코드 스트링은 문자 당 하나 이상의 바이트를 가지고 있습니다.

유니 코드로 인코딩에 따라 다릅니다. 문자 당 2 또는 4 바이트 또는 1,2 및 4 바이트의 혼합 일 수도 있습니다.

다른 팁

그것은 전적으로 플랫폼과 표현에 달려 있습니다.

예를 들어 .NET에서 문자열은 두 바이트를 가져옵니다. 메모리에서 UTF-16 코드 포인트 당. 그러나 대리 쌍은 U+100000에서 U+10FFFF 범위의 전체 유니 코드 문자에 대해 2 개의 UTF-16 값을 필요로합니다. 인 메모리 형태는 또한 문자열의 길이와 일부 패딩에 대한 오버 헤드뿐만 아니라 유형 포인터 등의 일반 객체 오버 헤드를 갖습니다.

이제 .NET에서 문자열을 디스크 (또는 네트워크 등)에 쓰면 인코딩을 지정합니다 (대부분의 클래스가 UTF-8로 기본값으로). 이 시점에서 크기는 인코딩에 크게 의존합니다. ASCII는 항상 문자 당 단일 바이트를 사용하지만 매우 제한적입니다 (악센트 등). UTF-8은 변수 인코딩으로 전체 유니 코드 범위를 제공합니다 (모든 ASCII 문자는 단일 바이트로 표시되지만 다른 바이트는 더 많이 차지합니다). UTF -32는 항상 모든 유니 코드 문자에 정확히 4 바이트를 사용합니다. 목록은 계속됩니다.

보시다시피, 그것은 간단한 주제가 아닙니다. 줄이 얼마나 많은 공간을 차지할 것인지 알아 내려면 지정해야합니다. 바로 그거죠 상황은 - 일부 플랫폼에서 메모리의 개체인지 (그렇다면, 어떤 플랫폼 - 잠재적으로 구현 및 운영 체제 설정에 따라) 또는 텍스트 파일과 같은 원시 인코딩 된 양식인지 여부와 그렇습니다. 어떤 인코딩 사용.

"길이"가 의미하는 바에 따라 다릅니다. "문자 수"를 의미한다면, 많은 언어/인코딩 메소드가 문자 당 하나 이상의 바이트를 사용합니다.

항상 그런 것은 아닙니다. 인코딩에 따라 다릅니다.

단일 대답은 없습니다. 그것은 언어에 따라 다릅니다 그리고 구현 (일부 언어에는 여러 구현이 있음을 기억하십시오!)

0이 종료 된 ASCII 문자열 점유 적어도 문자열의 "내용"보다 바이트가 하나 더 있습니다. (문자열이 어떻게 생성되었는지에 따라 더 많은 것을 할당 할 수 있습니다.)

0이 아닌 문자열이 아닌 문자열은 서사기 (또는 유사한 구조)를 사용하여 길이를 기록하며 추가 메모리를 사용합니다. 어딘가에.

유니 코드 문자열 (다양한 언어)은 숯 당 두 바이트를 사용합니다.

객체 저장소의 문자열은 핸들을 통해 참조 될 수 있으며, 메모리 관리를 단순화하기 위해 간접 계층 (및 더 많은 데이터)을 추가합니다.

당신이 올바른지. ASCII로 인코딩하면 문자 당 하나의 바이트가 있습니다. 그렇지 않으면 문자 당 하나 이상의 바이트입니다.

특히, 이것이 기판 작업에 어떻게 영향을 미치는지 아는 것이 중요합니다. 문자 당 하나의 바이트가 없다면, s [n]은 nth 바이트 또는 nth char를 얻습니까? nth char를 얻는 것은 캐릭터당 1 바이트와 마찬가지로 상수 대신 큰 n에 비효율적입니다.

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