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

简介: 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;
}

相关文章
|
12月前
|
Go
go string to int 字符串与整数型的互换
go string to int 字符串与整数型的互换
63 0
|
5月前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
3月前
|
Dragonfly Dart NoSQL
Dart ffi 使用问题之在Dart中调用String的toNativeUtf8方法时有什么是需要注意的
Dart ffi 使用问题之在Dart中调用String的toNativeUtf8方法时有什么是需要注意的
|
5月前
|
Dart
Dart中的String类型定义与拼接
Dart中的String类型定义与拼接
|
5月前
|
Java
String转化为Int
String转化为Int
|
6月前
int 和 String 互相转换的多种方法
int 和 String 互相转换的多种方法
38 1
|
Java
【Java用法】Java中String类型和int类型互转的所有方法
【Java用法】Java中String类型和int类型互转的所有方法
133 0
|
6月前
|
Python
Python系列(15)—— int类型转string类型
Python系列(15)—— int类型转string类型
|
Java
Java int 与 String 的互相转换
Java int 与 String 的互相转换
63 0
|
11月前
|
Python
TypeError: int() argument must be a string, a bytes原因
Python开发过程中,使用int()函数来转换或生成int类型的数据时,如果Python抛出并提示TypeError: int() argument must be a string, a bytes-like object or a real number, not 'complex',那么原因在于传递给int()函数的参数类型有误,正如TypeError的提示,int()函数的参数必须是string字符串(数值字符串)、类似字节对象、real number数字等,而不可以是complex复数类型的数据。
311 0