进制转换
/// 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的parse
或tryParse
方法
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; }