Dart基础:进制转换、int与string互转

进制转换

/// Converts [this] to a string representation in the given [radix].
///
/// In the string representation, lower-case letters are used for digits above
/// '9', with 'a' being 10 an 'z' being 35.
///
/// The [radix] argument must be an integer in the range 2 to 36.
String toRadixString(int radix);

返回值是一个代表当前进制的字符串。

radix 代表要转换的进制,从2到36,代表能转换为2进制到36进制。如果传入的进制不在这个范围,会直接报异常。

比如转换为37进制。

20.toRadixString(37);

运行会直接报以下异常,提示传入的进度不在2到36之间。

Unhandled exception:
RangeError (radix): Invalid value: Not in inclusive range 2..36: 37
#0      int.toRadixString (dart:core-patch/integers.dart:331:7)
#1      main (package:flutter_app/demo.dart:5:20)
#2      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:283:19)
#3      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)

转二进制

/// 申明10进制数
int num = 20;
/// 传入2
var binary = num.toRadixString(2);
print("20的二进制为 $binary")
// 打印结果: 20的二进制为 10100

转八进制

/// 申明10进制数
int num = 20;
/// 传入8
var binary = num.toRadixString(8);
print("20的八进制为 $binary")
// 打印结果: 20的八进制为 24

转十进制

/// 申明16进制数
int num = 0xd1;
/// 传入10
var binary = num.toRadixString(10);
print("20的十进制为 $binary")
// 打印结果: 20的十进制为 209

其实其他进制不需要转换为10进制,因为在打印或者跟10进制数运算时,Dart会自动转换为10进制。

转十六进制

/// 申明16进制数
int num = 20;
/// 传入10
var binary = num.toRadixString(16);
print("20的十六进制为 $binary")
// 打印结果: 20的十六进制为 14

ASCII码与String互转

ASCII码转String

单个ASCII码转换成字符

//char = "a"
String char = String.fromCharCode(97);

ASCII码数组转换成字符串

// str = "Hello World"
String str = String.fromCharCodes([72,101,108,108,111,32,87,111,114,108,100]);

String转ASCII码

单个字符转换成ASCII码

/// asciiNum = 97
int asciiNum =“a”.codeUnitAt(0);

字符串转换成一个ASCII码数组

/// asciiList = [72,101,108,108,111,32,87,111,114,108,100]
List<int> asciiList =Hello World.codeUnits;

String与int互转

int转String

直接使用toString()

int num = 20;
var s = num.toString();

String转int

使用int的parsetryParse方法

external static int parse(String source,
      {int? radix, @deprecated int onError(String source)?});
external static int? tryParse(String source, {int? radix});

radix是要转换的进制,默认为将String转换为10进制数。

String s = "20";
var i = int.parse(s);
/// 两者都可以
// var i = int.tryParse(s);

parse和tryParse区别

区别是遇到转换异常时的处理方式。

parse

使用parse的转换异常需要在onError回调中处理。如果onError为null,会直接造成程序崩溃。

String s = "20";
var i = int.parse(s, radix: 2);

比如将20的字符串转换为2进制形式的int,如果没有传入onError,会报以下异常信息。

Unhandled exception:
FormatException: Invalid radix-2 number (at character 1)
20
^

#0      int._throwFormatException (dart:core-patch/integers_patch.dart:132:5)
#1      int._parseRadix (dart:core-patch/integers_patch.dart:143:16)
#2      int._parse (dart:core-patch/integers_patch.dart:101:12)
#3      int.parse (dart:core-patch/integers_patch.dart:64:12)
#4      main (package:flutter_app/demo.dart:4:15)
#5      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:283:19)
#6      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
使用onError
String s = "20";

var i = int.parse(s, radix: 2,onError: (source){
  print("需要转换的字符串 $source");
  /// 返回一个int。
  return -1;
});

print("转换结果为 $i");

if (i == -1) {
  print("转换失败");
}

int onError(String source)

source是原始字符串。

返回值是一个指定的int值,转换后可以检查结果是否是这个值,来判断是否转换成功。

tryParse

官方已经将onError淘汰了,因为处理的方式不够优雅,而且使用时忘记使用onError导致程序崩溃那就得不偿失了。

对于不确定是否能正常转换的字符串,推荐使用tryParse进行转换。不需要处理异常,只需要判断返回值是否为null即可。

String s = "20";

var i = int.tryParse(s, radix: 2);

print("转换结果为 $i");
// 值为null,代表转换失败。
if (i == null) {
  print("转换失败");
  return;
}
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值