最近这令人头疼的就是各种类型的转换了
所以打算出一篇数据类型转换的文章,记录一下我所用到的实测可以用的类型转换方法。以后就不用这度娘那 Google 了。
# 进制转换
//10进制数转任意进制
char *decimal2Others (int value, char *string, int radix) {
char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; /* 索引表 */
unsigned uvalue; /* 无符号整型的中间变量,用于处理负数 */
char temp;
int i=0, j, k;
/* 确定uvalue的值 */
if (radix==10 && value<0) { /* 十进制负数 */
uvalue = (value*-1);
string[i++] = '-';
}
else
uvalue = (unsigned)value; /* (unsigned)value == 2^32 - value (4字节unsigned) */
/* 除基数取余 */
/* 计算结果存入string字符串,此时为最终转换结果的逆序 */
do {
string[i++] = index[uvalue % radix];
uvalue /= radix;
} while (uvalue);
string[i] = '\0'; /* string字符串末尾补'\0' */
/* 逆序处理 */
/* string字符串首尾元素依次交换 */
if (string[0]=='-') /* 十进制负数 */
k = 1; /* 跳过负号 */
else
k = 0;
for (j=k; j<=(i-1)/2.0; j++) {
temp = string[j];
string[j] = string[i-1-j+k];
string[i-1-j+k] = temp;
}
return string;
}
# 有符号转无符号
//char* 转 unsigned char*
void char2uchar(char * str ,unsigned char * ustr,int length)
{
int i = length, j = 0,counter=0;
char c[2]={0};
unsigned int bytes[2]={0};
for (j = 0; j < i; j += 2)
{
if (0 == j % 2)
{
c[0] = str[j];
c[1] = str[j + 1];
sscanf(c, "%02x" , &bytes[0]);
ustr[counter] = bytes[0];
counter++;
}
}
return;
}
# uint8_t 转 QString
//uint8_t 转为str
QString uint82qstring(uint8_t *udata,int length){
QString code_str;
for (int i = 0; i < length;i++)
{
//分离16进制数的"十位"和“个位”
char s1 = char(udata[i] >> 4);
char s2 = char(udata[i] & 0xf);
//将分离得到的数字转换成对应的ASCII码,数字和字母分开,统一按照小写处理
s1 > 9 ? s1 += 55 : s1 += 48;
s2 > 9 ? s2 += 55 : s2 += 48;
//将处理好的字符放入到string中
code_str.append(s1);
code_str.append(s2);
}
return code_str;
}
# QString 转 uint8_t
unsigned char puchar[1024];
uint8_t *qstring2uint8(QString string){
char * pchar;
QByteArray temparr;
int len;
temparr = string.toLatin1();
pchar = temparr.data();
len = temparr.size();
//将得到的char类型转为uchar
convertStrToUnChar(pchar,puchar,len);
return puchar;
}
# 数字转字符串
int i=10;
QString s = QString::number(i);