#include "myTools.h"
#include "qdebug.h"
#include "myTools.h"
QString Hex2String(bool insert_space, char *hex_data, int length)
{
QString str;
quint8 temp;
str.clear();
if (insert_space == 0) {
for (int i = 0; i<length; i++) {
temp = hex_data[i] & 0xFF;
str = str + QString().sprintf("%02x", temp);
}
}
else {
for (int i = 0; i<length; i++) {
temp = hex_data[i] & 0xFF;
str = str + QString().sprintf("%02x ", temp);
}
str = str.left(str.length() - 1);
}
return str;
}
void String2Hex(char * hex_data, QString hexStr, int hex_len)
{
String2Hex(hex_data, hexStr.toLocal8Bit().data(), hex_len);
}
QByteArray String2Hex(QByteArray &ba, QString hexStr)
{
char *buffer = NULL;
ba.clear();
buffer = (char*)malloc(hexStr.length() * 2 + 16);
if (buffer) {
int len = hexStr.length() / 2;
String2Hex(buffer, hexStr, len);
ba.append(buffer, len);
free(buffer);
}
return ba;
}
void String2Hex(char * hex_data, char* hexStr,int hex_len)
{
int count,tmp;
char subStr[4] = { 0 };
if (strlen(hexStr) / 2 >= hex_len)count = hex_len;
else count = strlen(hexStr) / 2;
for (int i = 0; i < hex_len; i++) {
if (i < count) {
memcpy(subStr, hexStr + 2 * i, 2);
sscanf(subStr, "%02x", &tmp);
hex_data[i] = tmp & 0xFF;
}
else {
hex_data[i] = 0x00;
}
}
}
void showHex(QString text, void *hex_data, quint32 length)
{
QString qstr;
char *pdat = (char*)hex_data;
qstr.clear();
//QString().sprintf("[ %s ]: length=%d", name.toStdString(), length)
qstr = "[ " + text + " ]:length=";
qstr.append(QString().sprintf("%d", length));
qDebug() << qstr;
for (quint32 i = 0; i < ((length + 15) & (~15)); i++) {
if (i % 16 == 0) {
if (i != 0)qDebug() << qstr;
qstr.clear();
qstr.append(QString().sprintf(" %08d ", i));
}
if (i < length)qstr.append(QString().sprintf("%02x ", pdat[i] & 0xFF));
else qstr.append(" ");
if ((i + 1) % 16 == 0) {
qstr.append(" | ");
for (int n = 0; n < 16; n++) {
quint8 ch;
ch = pdat[i - 15 + n];
if (ch < ' ' || ch > '~')ch = '.';
if ((i - 15 + n) < length)qstr.append(QString().sprintf("%c", ch));
else qstr.append(" ");
}
}
}
qDebug() << qstr<<"\n";
}
//逆序拷贝
void *memcpy_reverse(void *dst, const void *src, unsigned int len)
{
char *pDst;
const char *pSrc;
pSrc = (const char*)src;
pSrc += (len - 1);
pDst = (char*)dst;
while (len--) {
*pDst++ = *pSrc--;
}
return (pDst);
}
int mem_iszero(const void *p, unsigned int len)
{
char *tmp = (char*)p;
while (len--) {
if (*tmp != 0)return -1;
tmp++;
}
return 0;
}
unsigned char Bcd2Bin(unsigned char bcd_value)
{
return bcd_value / 16 * 10 + bcd_value % 16;
}
unsigned char Bin2Bcd(unsigned char bin_value)
{
return bin_value / 10 * 16 + bin_value % 10;
}
评论0