검색결과 리스트
HEX에 해당되는 글 3건
- 2015.11.18 qbytearray의 hex 값을 int로 바꾸기.
- 2015.10.28 qt에서 c로 메모리에 쓴 float을 원복하는 방법
- 2015.03.03 QT 에서의 string 처리 모음
QByteArray s_byte;
s_byte.append((char)0x7e);
bool ok;
int t = s_byte.toHex().toInt(&ok, 16);
QByteArray tmp,tmp2;
//tmp.append((char)0x00);
//tmp.append((char)0x01);
tmp.append((char)0x7e);
tmp.append((char)0x0c);
tmp2.append((char)0xff);
tmp2.append((char)0xff);
bool isok;
int size = 0;
//Log() << QString().sprintf("4 : %05f", tmp2.toDouble(&isok));
size = tmp2.toHex().toInt(&isok, 16);
Log() << size;
size = tmp.toHex().toInt(&isok, 16);
Log() << size;
Log();
테스트는 1자리, 2자리까지만 해봄.
0~FFFF까지.
C / C++에서 float 형으로 저장된 값을 메모리에 쓰고
그 메모리있는 hex 값을 읽어서 qt에서 float으로 원복하는 방법.
1. 각 메로리에 있는 hex 값을 읽어온다.
QByteArray temparr;
temparr.append(((rcvPacket[1] & 0x0F)*16 + (rcvPacket[2] & 0x0F)));
temparr.append(((rcvPacket[4] & 0x0F)*16 + (rcvPacket[5] & 0x0F)));
temparr.append(((rcvPacket[7] & 0x0F)*16 + (rcvPacket[8] & 0x0F)));
temparr.append(((rcvPacket[10] & 0x0F)*16 + (rcvPacket[11] & 0x0F)));
2. 읽어온 데이터를 역으로 읽어서 계산한다.
float gainslope = bytesToFloat(temparr[3], temparr[2], temparr[1], temparr[0])
float SerialProtocol3::bytesToFloat(uchar b0, uchar b1, uchar b2, uchar b3){
float output;*((uchar*)(&output) + 3) = b0;*((uchar*)(&output) + 2) = b1;*((uchar*)(&output) + 1) = b2;*((uchar*)(&output) + 0) = b3;return output;}
장치데이터 읽은 쪽에서 유용한다.
1. hex 값이 들어 있는 QbyteArray를 String으로 만들 때
QString temp = QString(tarr.toHex());
QString().sprintf 으로 할려니까 노답.
2. hex값 들이 나열된 string을 int로 바꿀 때
qint64 tvalue = temp.toInt(&ok, 16);
3. Windows의 localtime32로 생성한 데이터를 바이너리 데이터로 저장하고 QT에서 읽어올때
1,2번을 거쳐서 만든 값은 sec 값으로서 해당 값에 1000을 곱해준 다음에 밀리세컨드를 시간으로 변경해주는 함수를 사용한다.
QDateTime datatime = QDateTime::fromMSecsSinceEpoch(tvalue * 1000);
4. 10진수 값을 hex string으로 만들때.
QString::number(temp_number[1], 16)
만일 이 값의 "0"으로 자릿수를 맞추면서 hex로 변환한다고 한다면
QString("%1").arg(temp_number[1], 2, 16, QLatin1Char( '0' )).toUpper()
RECENT COMMENT