std::string port = (const char*)QString("%1").arg(portNumber).toLocal8Bit();
%1 의 역할
printf( "%d %d %d", 1, 2, 3 ); ->> 각각의 가변인자들을 받고
char aaa[100];
sscanf( aaa , "Error : No=%d, Message=%s ", 100, "Invalid header" );
( scanf 는 문자를 입력받고, sscanf 는 문자열을 입력받는다 )
위에서처럼 가변 인자들을 해당 캐릭터 셋으로 맞춰주어야 한다.
하지만,
QString strMessage = QString( "Error No=%1, Message=%2").arg(100).arg("Invalid header");
의 뒤의 가변인자들을 %1 ~ %99 까지 지정하고 이를 순서상으로 캐릭터 셋을 %d, %s, %c 등으로 맞춰줄필요없이 사용가능하다.
이걸 응용한 것이
QString strMessage = QString( "Error No=%1, Message=%2, Plus = %2,%1").arg(100).arg("Invalid header");
// plus 뒤에서 %2%1 처럼 순서의 조합 ,뒤집기가 가능하다
나는 %1을 %2 있습니다. 칼을, 가지고
I %2 %1, the sword, have,
문자열의 체계는 각각의 언어별로 codepage 가 지정되 있고
cmd 창에서 chcp 를 입력하면 우리나라 언어가 -> 활성코드 페이지 949 가 출력된다.
예를들어 0x90 0x12 같은 문자의 경우 0x80 이상의 문자가 첫번째 바이트에 오게되고
운영체제에서 각각의 사용자가 지정한 코드페이지를 참조하여 해당 국가의 문자를 출력하게 된다
0x7E 까지는 아스키 코드문자 이지만 그이상을 넘어가게되면
0x20 0x90 0x70 면 아스키문자 에 90과70번지의 문자를 조합해서 해당나라의 언어를 찍어준다!.
QString("AAA"); 16bit -> unicode ( _UNICODE 가 선언이 되있는경우)
QString("AAA") 8bit -> MBCS -> Multi byte character system.
위에서 정의한 QString 에서의 define _UNICODE 라면 16bit 유니코드셋이 아니라면 8bit 로 지정될테지만
이를 코드상에서 확실히 하기위해 아래와 같은 함수를 제공해준다.
QString aaa = std::string( "AAA" );
-> QString aaa;
aaa.fromStdString( std::string( "AAA" ) ); // string( "AAA" ) 받는 문자열 이라면 from 쪽 계열을.. , 보내는 입장이라면 to 계열을..
http://doc.qt.io/qt-5/qstring.html // 자세한 건 해당페이지 참조.

'Language' 카테고리의 다른 글
C# 의 델리게이트 (0) | 2015.12.06 |
---|---|
문자열을 Packet 에 담을경우 UTF16 으로 변환. (0) | 2015.12.06 |
가변인자... 의 활용 (0) | 2015.12.06 |
std::set<> (0) | 2015.12.06 |
const 함수 (0) | 2015.12.06 |