xbytearray.cpp
167 lines
| 3.5 KiB
| text/x-c
|
CppLexer
Jeandet Alexis
|
r0 | #include "xbytearray.h" | ||
XByteArray::XByteArray() | ||||
{ | ||||
_oldSize = -99; | ||||
_addressNumbers = 4; | ||||
_addressOffset = 0; | ||||
} | ||||
int XByteArray::addressOffset() | ||||
{ | ||||
return _addressOffset; | ||||
} | ||||
void XByteArray::setAddressOffset(int offset) | ||||
{ | ||||
_addressOffset = offset; | ||||
} | ||||
int XByteArray::addressWidth() | ||||
{ | ||||
return _addressNumbers; | ||||
} | ||||
void XByteArray::setAddressWidth(int width) | ||||
{ | ||||
if ((width >= 0) and (width<=6)) | ||||
{ | ||||
_addressNumbers = width; | ||||
} | ||||
} | ||||
QByteArray & XByteArray::data() | ||||
{ | ||||
return _data; | ||||
} | ||||
void XByteArray::setData(QByteArray data) | ||||
{ | ||||
_data = data; | ||||
_changedData = QByteArray(data.length(), char(0)); | ||||
} | ||||
bool XByteArray::dataChanged(int i) | ||||
{ | ||||
return bool(_changedData[i]); | ||||
} | ||||
QByteArray XByteArray::dataChanged(int i, int len) | ||||
{ | ||||
return _changedData.mid(i, len); | ||||
} | ||||
void XByteArray::setDataChanged(int i, bool state) | ||||
{ | ||||
_changedData[i] = char(state); | ||||
} | ||||
void XByteArray::setDataChanged(int i, const QByteArray & state) | ||||
{ | ||||
int length = state.length(); | ||||
int len; | ||||
if ((i + length) > _changedData.length()) | ||||
len = _changedData.length() - i; | ||||
else | ||||
len = length; | ||||
_changedData.replace(i, len, state); | ||||
} | ||||
int XByteArray::realAddressNumbers() | ||||
{ | ||||
if (_oldSize != _data.size()) | ||||
{ | ||||
// is addressNumbers wide enought? | ||||
QString test = QString("%1") | ||||
.arg(_data.size() + _addressOffset, _addressNumbers, 16, QChar('0')); | ||||
_realAddressNumbers = test.size(); | ||||
} | ||||
return _realAddressNumbers; | ||||
} | ||||
int XByteArray::size() | ||||
{ | ||||
return _data.size(); | ||||
} | ||||
QByteArray & XByteArray::insert(int i, char ch) | ||||
{ | ||||
_data.insert(i, ch); | ||||
_changedData.insert(i, char(1)); | ||||
return _data; | ||||
} | ||||
QByteArray & XByteArray::insert(int i, const QByteArray & ba) | ||||
{ | ||||
_data.insert(i, ba); | ||||
_changedData.insert(i, QByteArray(ba.length(), char(1))); | ||||
return _data; | ||||
} | ||||
QByteArray & XByteArray::remove(int i, int len) | ||||
{ | ||||
_data.remove(i, len); | ||||
_changedData.remove(i, len); | ||||
return _data; | ||||
} | ||||
QByteArray & XByteArray::replace(int index, char ch) | ||||
{ | ||||
_data[index] = ch; | ||||
_changedData[index] = char(1); | ||||
return _data; | ||||
} | ||||
QByteArray & XByteArray::replace(int index, const QByteArray & ba) | ||||
{ | ||||
int len = ba.length(); | ||||
return replace(index, len, ba); | ||||
} | ||||
QByteArray & XByteArray::replace(int index, int length, const QByteArray & ba) | ||||
{ | ||||
int len; | ||||
if ((index + length) > _data.length()) | ||||
len = _data.length() - index; | ||||
else | ||||
len = length; | ||||
_data.replace(index, len, ba.mid(0, len)); | ||||
_changedData.replace(index, len, QByteArray(len, char(1))); | ||||
return _data; | ||||
} | ||||
QChar XByteArray::asciiChar(int index) | ||||
{ | ||||
char ch = _data[index]; | ||||
if ((ch < 0x20) or (ch > 0x7e)) | ||||
ch = '.'; | ||||
return QChar(ch); | ||||
} | ||||
QString XByteArray::toRedableString(int start, int end) | ||||
{ | ||||
int adrWidth = realAddressNumbers(); | ||||
if (_addressNumbers > adrWidth) | ||||
adrWidth = _addressNumbers; | ||||
if (end < 0) | ||||
end = _data.size(); | ||||
QString result; | ||||
for (int i=start; i < end; i += 16) | ||||
{ | ||||
QString adrStr = QString("%1").arg(_addressOffset + i, adrWidth, 16, QChar('0')); | ||||
QString hexStr; | ||||
QString ascStr; | ||||
for (int j=0; j<16; j++) | ||||
{ | ||||
if ((i + j) < _data.size()) | ||||
{ | ||||
hexStr.append(" ").append(_data.mid(i+j, 1).toHex()); | ||||
ascStr.append(asciiChar(i+j)); | ||||
} | ||||
} | ||||
result += adrStr + " " + QString("%1").arg(hexStr, -48) + " " + QString("%1").arg(ascStr, -17) + "\n"; | ||||
} | ||||
return result; | ||||
} | ||||