天天看点

C++数据格式转换1 将整数转化为字符串2 将字符串转换为整数3 字符串间的转换

本文主要讲述整数、二进制字符串与十六进制字符串之间的转换。

1 将整数转化为字符串

1.1 将整数转换为二进制字符串

使用_ltoa_s()函数可以将整数转换为二进制字符串。该函数的作用是将一个long整数转换为字符串。_ltoa_s()函数有很多格式,其中的一个格式为

errno_t _ltoa_s(long value, char *str, int radix);
           

其中,参数value指定了要转换的整数;str指定转换后的字符串;radix指定了要将value转换成的进制。如果转换成功,返回值是0;如果转换失败,则返回失败代码。

long i = 1024L;
char b[33], bs[33];
_ltoa_s(i, b, 2);
sprintf_s(bs, "%032s", b);
printf("i=%d, bs=%s\n", i, bs);
           

其中,sprintf_s() 函数的作用是将转换后的字符串 b 进行格式化处理,并将格式化后的字符串保存在 bs 中。将 b 进行 %032s 的格式化,其中, 32 表示转换后的字符串长度为 32,32 前面的 0 表示如果 b 的位数不足 32 ,则用 0 补齐。输出后的效果如图 1 所示。

C++数据格式转换1 将整数转化为字符串2 将字符串转换为整数3 字符串间的转换

图1 将整数转换为二进制字符串

1.2 将整数转换为十六进制字符串

依然使用_ltoa_s()函数,可以将整数转换为十六进制字符串。

i = 1024L;
char hs[9], h[9];
_ltoa_s(i, h, 16);
sprintf_s(hs, "%08s", h);
printf("i=%d, hs=%s\n", i, hs);
           

其中,_ltoa_s()函数的第3个参数16表示将整数i转换为16进制的字符串;sprintf_s()函数的第2个参数指定了转换的格式,8表示转换后的字符串位数是8位,8前面的0表示不足8位时,用0来填充。输出的效果如图2所示。

C++数据格式转换1 将整数转化为字符串2 将字符串转换为整数3 字符串间的转换

图2 将整数转换为十六进制字符串

2 将字符串转换为整数

2.1 将二进制字符串转换为整数

使用strtol()函数可以将二进制字符串转换为整数。该函数的格式为

long strtol(const char* nptr, char **endptr, int base);
           

其中,参数nptr指定了要转换的字符串;endptr指向了停止扫描的字符;base指定了nptr对应的进制数。返回值是转换后的整数。

strncpy_s(bs, 33, "00000000000000000000010000000000", 33);
char *e;
i = strtol(bs, &e, 2);
printf("bs=%s, i=%d\n", bs, i);
           

其中,strncpy_s()函数的作用是将bs指定为二进制字符串;strtol()函数的第3个参数指定了bs表示的字符串对应的是二进制。其输出如图3所示。

C++数据格式转换1 将整数转化为字符串2 将字符串转换为整数3 字符串间的转换

图3 将二进制字符串转换为整数

2.2 将十六进制字符串转换为整数

依然使用strtol()函数,将十六进制字符串转换为整数。

strncpy_s(hs, 9, "00000400", 9);
i = strtol(hs, &e, 16);
printf("hs=%s, i=%d\n", hs, i);
           

其中,strtol()函数的第2个参数e是在“2.1 将二进制字符串转换为整数”中定义的变量;第3个参数16表示hs表示的字符串其对应16进制。以上代码的输出如图4所示。

C++数据格式转换1 将整数转化为字符串2 将字符串转换为整数3 字符串间的转换

图4 将十六进制字符串转换为整数

3 字符串间的转换

3.1 将二进制字符串转换为十六进制字符串

将二进制字符串转换为十六进制字符串,实际上就是使用在“2.1 将二进制字符串转换为整数”中提到的方法,先将二进制字符串转换为整数,之后使用“1.2将整数转换为十六进制字符串”中提到的方法,再将整数转换为十六进制字符串。

//将将二进制字符串转换为整数
strncpy_s(bs, 33, "00000000000000000000010000000000", 33);
i = strtol(bs, &e, 2);
   //将整数转换为十六进制字符串
_ltoa_s(i, h, 16);
sprintf_s(hs, "%08s", h);
printf("bs=%s, hs=%s\n", bs, hs);
           

以上代码的输出如图5所示。

C++数据格式转换1 将整数转化为字符串2 将字符串转换为整数3 字符串间的转换

图5 将二进制字符串转换为十六进制字符串

3.2 将十六进制字符串转换为二进制字符串

将二进制字符串转换为十六进制字符串,实际上就是使用在“2.2 将十六进制字符串转换为整数”中提到的方法,先将十六进制字符串转换为整数,之后使用“1.1将整数转换为二进制字符串”中提到的方法,再将整数转换为二进制字符串。

//将将十六进制字符串转换为整数
strncpy_s(hs, 9, "00000400", 9);
i = strtol(hs, &e, 16);
//将整数转换为二进制字符串
_ltoa_s(i, b, 2);
sprintf_s(bs, "%032s", b);
printf("hs=%s, bs=%s\n", hs, bs);
           

以上代码的输出如图6所示。

C++数据格式转换1 将整数转化为字符串2 将字符串转换为整数3 字符串间的转换

图6 将十六进制字符串转换为二进制字符串

继续阅读