最近这令人头疼的就是各种类型的转换了

所以打算出一篇数据类型转换的文章,记录一下我所用到的实测可以用的类型转换方法。以后就不用这度娘那 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);
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

flechazo 微信支付

微信支付

flechazo 支付宝

支付宝

flechazo 贝宝

贝宝