专栏/C++进制转换如16进制string转uint16_t

C++进制转换如16进制string转uint16_t

2022年05月27日 00:27--浏览 · --点赞 · --评论
粉丝:0文章:3

### 1. C++使用的进制转换

#### 1.1 16进制string转uint16_t

- 如: "0x0" -> 0

```

            uint16_t serviceBid;

            sscanf(row.serviceBid.c_str(), "%hx", &serviceBid);

```

#### 1.2 string 转 unint_8

```

            uint8_t uiArbType = atoi(jsonValue["WLCtlArbType"].asCString());

```

#### 1.3 string 转 char *

```

 char *tempOrder = new char[1024];

 strcpy(tempOrder, order.c_str());

```

#### 1.4 16进制string转uint8_t

- 如: "0x0" -> 0

```

    uint16_t uiType_16;

    sscanf(jsonValue["WLCtlType"].asCString(), "%hx", &uiType_16);

    uint8_t uiType = uiType_16;

```

## 2. C++其他进制转换

```

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <locale.h>

int main() {

    int i,v;

    char bs[33];

    char b[33];

    char hs[9];

    char h[9];

    char s[4];

    char *e;

 

// 十进制整数转二进制串;

    i=1024;

    ltoa(i,b,2);

    sprintf(bs,"%032s",b);

    printf("i=%d,bs=%s\n",i,bs);

// 十进制整数转十六进制串;

    i=1024;

    ltoa(i,h,16);

    sprintf(hs,"%08s",h);

    printf("i=%d,hs=%s\n",i,hs);

// 十六进制字符串转成十进制数

    strcpy(hs,"00000400");

    sscanf(hs,"%x",&i);

    printf("hs=%s,i=%d\n",hs,i);

// 二进制字符串转化为十六进制字符串;

    strcpy(bs,"00000000000000000000010000000000");

    i=strtol(bs,&e,2);

    ltoa(i,h,16);

    sprintf(hs,"%08s",h);

    printf("bs=%s,hs=%s\n",bs,hs);

// 二进制字符串转化为十进制数;

    strcpy(bs,"00000000000000000000010000000000");

    i=strtol(bs,&e,2);

    printf("bs=%s,i=%d\n",bs,i);

// 十六进制字符串转成二进制串

    strcpy(hs,"00000400");

    sscanf(hs,"%x",&i);

    ltoa(i,b,2);

    sprintf(bs,"%032s",b);

    printf("hs=%s,bs=%s\n",hs,bs);

// ASC\GBK字符串转十六进制串

    strcpy(s,"a汉");

    i=0;

    while (1) {

        if (0==s[i]) break;

        sprintf(hs+i*2,"%02X",(unsigned char)s[i]);

        i++;

    }

    setlocale(LC_ALL,"chs");

    printf("s=%s,hs=%s\n",s,hs);

// 十六进制字符串转成汉字(GBK)及字符(ASC)

    strcpy(hs,"61BABA");

    i=0;

    while (1) {

        if (1!=sscanf(hs+i*2,"%2x",&v)) break;

        s[i]=(char)v;

        i++;

    }

    s[i]=0;

    printf("hs=%s,s=%s\n",hs,s);

 

    return 0;

 

}

//i=1024,bs=00000000000000000000010000000000

//i=1024,hs=00000400

//hs=00000400,i=1024

//bs=00000000000000000000010000000000,hs=00000400

//bs=00000000000000000000010000000000,i=1024

//hs=00000400,bs=00000000000000000000010000000000

//s=a汉,hs=61BABA

//hs=61BABA,s=a汉

```


投诉或建议