二进制序列 转 十六进制字符串
int bytesToHexString(char *dst, const char *src, int srcLen) {
const char hexTbl[] = "0123456789ABCDEF";
int i = 0;
int hexLen = 0;
for(i = 0; i < srcLen; i++) {
dst[hexLen++] = hexTbl[*src >> 4];
dst[hexLen++] = hexTbl[*src & 0x0f];
src++;
}
dst[hexLen] = '\0';
return hexLen;
}
十六进制字符串 转 二进制序列
int hexStringToBytes(char *dst, const char *src, int srcLen) {
int i;
for(i = 0; i < srcLen; i+=2) {
dst[i / 2] = (char)(hexCharToInt(src[i]) << 4 | hexCharToInt(src[i + 1]));
}
return i / 2;
}
int hexCharToInt(char c) {
if (c >= '0' && c <= '9')
return (c - '0');
if (c >= 'A' && c <= 'F')
return (c - 'A' + 10);
if (c >= 'a' && c <= 'f')
return (c - 'a' + 10);
return 0;
}
字符 转 宽字符
int bytesToWideChar(WCHAR* dst, const char* src, int srcLen) {
int i = 0;
int len = 0;
for(i = 0; i < srcLen / 2; i++) {
dst[len] = *src++ << 8;
dst[len] |= *src++;
len++;
}
return len;
}
宽字符 转 字符
int wideCharToByte(unsigned char* dst, const WCHAR* src, int srcLen) {
int i = 0;
WCHAR* pTemp = (WCHAR*) dst;
for (i = 0; i < srcLen; i++) {
if (!isLittleEndian()) {
*(pTemp + i) = *(src + i);
} else {
*(pTemp + i) = *(src + i) << 8;
*(unsigned char*) (pTemp + i) = *(src + i) >> 8;
}
}
return srcLen * 2;
}
// 判断大小端
int isLittleEndian() {
long data = 1;
char *first = (char*)&data;
return (1 == *first);
}