1、C和C++都沒有提供位元的表達方法。
2、C,C++語言中,如何表達一個八位元呢?
如果這個數是 876,我們可以斷定它不是八位元,因為八位元中不可能出7以上的阿拉伯數字。但如果這個數是123、是567,或12345670,那麼它是八位元還是10進位數,都有可能。
所以,C,C++規定,一個數如果要指明它採用八進位,必須在它前面加上一個0,如:123是十進位,但0123則表示採用八進位。
int 0123;
這就是八位元在C、C++中的表達方法。但是有一個例外就是轉意符'\'。
因為C,C++規定不允許使用斜杠加10進位數來表示字元,所以 :
'?' //ASCII值是63
'\077' //是8進位表示'?',0可以省略,因為C,C++規定不允許使用斜杠加10進位數來表示字元
'\0x3F' //是16進位表示'?'
3、 C,C++規定,16進位數必須以 0x開頭
int 0x15A
其中的x也也不區分大小寫。(注意:0x中的0是數字0,而不是字母o)。
註:
1) 8進位和16進位只能用達無符號的正整數,如果你在代碼中裡:-078,或者寫:-0xF2,C,C++並不把它當成一個負數。
2) Qt中把十進位整型值轉換成16進位 的字串方法。
int a = 63; QString s = QString::number(a, 16); // s == "3f" QString t = QString::number(a, 16).toUpper(); // t == "3F"
3) QString 儲存16進位值
//將字串以16進位形式輸出 QString cmd = 0x0a; qDebug() <<" cmd:"<< cmd.toAscii().toHex();
4)QString 按照字串表面格式 轉換成16進位
QString str = "FF"; bool ok; int hex = str.toInt(&ok, 16); // hex == 255, ok == true 0xFF int dec = str.toInt(&ok, 10); // dec == 0, ok == false
4) QByteArray 儲存16進位值
static const char mydata[] = { 0x00, 0x00, 0x03, 0x84, 0x78, 0x9c, 0x3b, 0x76, 0xec, 0x18, 0xc3, 0x31, 0x0a, 0xf1, 0xcc, 0x99, 0x6d, 0x5b }; QByteArray bd = QByteArray::fromRawData(mydata, sizeof(mydata)); qDebug() <<"bd.data:" <<bd.data(); qDebug() <<"bd.toHex():"<<bd.toHex();//輸出16進位值
5) QChar 儲存16進位值,列印
QChar c = 0x0A; QByteArray array; array.append(c); qDebug() << array.toHex();//結果是"0a"
6)char* 儲存16進位,列印
char c[] = {0x0A,0x0B,'\0'}; QByteArray array(c); qDebug() << array.toHex();//結果 "0a0b"