| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #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) && (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) || (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;
- }
|