Qt 에서 QString 을 const char*(),QByteArray 등 으로 변환 하 는 방법
3382 단어 Qt
QString:
QString 클래스 는 유 니 코드 문자열 을 제공 합 니 다.
QString 은 16 비트 QChars 문자열 을 저장 합 니 다.그 중에서 QChar 마다 유 니 코드 4.0 문자 가 대응 합 니 다.(코드 값 이 65535 이상 인 유 니 코드 문 자 는 프 록 시 항목 을 사용 하여(즉,두 개의 연속 적 인 QChars)저장 합 니 다.)
유 니 코드 는 현재 사용 되 고 있 는 대부분의 쓰기 시스템 을 지원 하 는 국제 표준 이다.그것 은 US-ASCII(ANSI X3.4-1866)와 Latin-1(ISO 8859-1)의 초 집합 으로 모든 US-ASCII/Latin-1 문 자 는 같은 코드 위치 에 있다.
막후 에서 QString 은 메모리 사용 을 줄 이 고 불필요 한 데이터 복 제 를 피하 기 위해 암시 적 공유(쓰기 시 복사)를 사용 합 니 다.8 자리 문자 가 아 닌 16 자리 문 자 를 저장 하 는 고유 비용 을 줄 이 는 데 도 도움 이 된다.
QString 뿐만 아니 라 Qt 는 원본 바이트 와 전통 적 인 8 비트'\0'으로 끝 나 는 문자열 을 저장 하기 위해 QByteArray 클래스 를 제공 합 니 다.대부분의 경우 QString 은 사용 할 클래스 입 니 다.이 는 전체 Qt API 에서 사 용 됩 니 다.유 니 코드 는 프로그램 시장 을 확장 하려 면 프로그램 이 쉽게 번역 할 수 있 도록 지원 합 니 다.QByteArray 에 적용 되 는 두 가지 주요 상황 은 원본 바 이 너 리 데 이 터 를 저장 해 야 할 때 와 메모리 보호 가 매우 중요 할 때(예 를 들 어 내장 시스템 에서)입 니 다.
QString str = "Hello";
QString str;
str.resize(4); str[0] = QChar('U'); str[1] = QChar('n'); str[2] = QChar(0x10e3); str[3] = QChar(0x03a3);
QByteArray:
QByteArray 클래스 는 바이트 배열 을 제공 합 니 다.
QByteArray 는 원본 바이트('\0'포함)와 전통 적 인 8 비트'\0'으로 끝 나 는 문자열 을 저장 하 는 데 사용 할 수 있 습 니 다.QByteArray 를 사용 하 는 것 이 const char*를 사용 하 는 것 보다 훨씬 편리 합 니 다.배경 에 서 는 항상 데이터 뒤에'\0'종료 자 를 따 르 고 암시 적 공유(쓸 때 복사)를 사용 하여 메모리 사용 을 줄 이 고 불필요 한 데이터 복 제 를 피 합 니 다.
QByteArray 외 에 Qt 는 문자열 데 이 터 를 저장 하기 위해 QString 클래스 를 제공 합 니 다.대부분의 경우 QString 은 사용 할 클래스 입 니 다.프로그램 에 비 ASCII/비 라틴-1 문 자 를 쉽게 저장 할 수 있 도록 16 비트 유 니 코드 문 자 를 저장 합 니 다.또한 QString 은 Qt API 에서 일관 되 게 관통 한다.QByteArray 에 적용 되 는 두 가지 주요 상황 은 원본 바 이 너 리 데 이 터 를 저장 해 야 할 때 와 메모리 보호 가 매우 중요 할 때(예 를 들 어 내장 형 Linux 에 대해 서 는 Qt 를 사용 하 는 것)입 니 다.
예 를 들 면:
QByteArray ba("Hello");
QByteArray ba;
ba.resize(5);
ba[0] = 0x3c;
ba[1] = 0xb8;
ba[2] = 0x64;
ba[3] = 0x18;
ba[4] = 0xca;
그렇다면 둘 사이 의 전환 은?
아래 의 방법 은 모두 인터넷 검색 과 도움말 문서 에서 얻 을 수 있다.
//상용 매개 변수 유형:char*문자열,QByteArray 문자 배열,QString 문자열//변환 필요:char*-전- QByteArray ---QByteArray 클래스 의 구조 함수 char*를 호출 해 야 합 니 다. --------------QByteArray(const char*)-----------> QByteArray char* str; QByteArray byte(str);
char* --------------QString(const char*)-------------->QString char* str; QString string(str);
QByteArray -------------data()-------------------->char* QByteArray byte; char* str = byte.data();
QByteArray ------------QString()------------------->QString QByteArray byte; QString string(byte);
QString --------------toAscii()--------------------> QByteArray QString string; QByteArray byte = string.toAscii();
QString -------------qPrintable()------------------>char* QString string; char* str = qPrintable(string);
예 를 들 어 항목 에 사 용 된 것:
char *msg;
QString Buffer = "ab-cd-ef-gh";
unsigned char BufAddr[9];
QByteArray ba = Buffer .toLatin1();
msg = ba.data();
int i=0;
while (*msg) {
if(*msg != '-')
{
BufAddr[i] = *msg;
i++;
++msg;
}
else
{
++msg;
}
}
그 중에서 toLatin 1,toLocal8Bit 는 모두 QString 이 QByteArray 를 전환 하 는 방법 이 고 Latin 1 은 ASCII 를 대표 하 며 Local8Bit 는 유 니 코드 를 대표 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt로 문자와 이미지의 혼합 텍스트 그리기텍스트를 그리려면 QPainter::drawText 함수를 사용하지만 텍스트와 동시에 이미지 (아이콘 등)를 함께 그리기를 원합니다. QLabel와 QPushButton는 이미지와 텍스트를 표시하는 기능을 가지고 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.