process返回一个Uint 8List,它是无符号整数(0-255)的列表。我需要将这个Uint 8List转换成一个字符串,这样我就可以很容易地将它转换回相同的Uint 8List。
var cipherText = cipher.process( inputAsUint8List ); return ASCII.decode(cipherText);
ASCII.decode抛出错误,因为某些整数> 127。
ddrv8njm1#
我想应该是这样的:
String s = new String.fromCharCodes(inputAsUint8List); var outputAsUint8List = new Uint8List.fromList(s.codeUnits);
v7pvogib2#
回答具体问题。我没有用过密码程序,找不到文件。但如果它只是返回原始字节,那么这些字节最好编码为十六进制或base64。看看CryptoUtils.bytesToBase64和CryptoUtils. bytesToHex。要回答标题中的一般问题,如果Uint 8List包含UTF8文本,请使用dart:convert库中的utf8.decode()。请参阅API文档。
import 'dart:convert'; main() { var encoded = utf8.encode("Îñţérñåţîöñåļîžåţîờñ"); var decoded = utf8.decode([0x62, 0x6c, 0xc3, 0xa5, 0x62, 0xc3, 0xa6, 0x72, 0x67, 0x72, 0xc3, 0xb8, 0x64]); }
fromCharCodes()接受一个UTF-16代码单元列表作为输入。另请参阅LATIN 1,当输入< 0xFF时,它的行为与String.fromCharCodes相同。
4c8rllxm3#
Uint8List x; Utf8Decoder().convert(x);
fjnneemd4#
Dart使用UTF-16来存储String s。目前在Dart中,还没有简单的方法可以轻松地将其转换为字节并向后转换。因此,您可以使用原始计算将String转换为Uint8List并向后转换。Dart代码:
String
Uint8List
import 'dart:typed_data'; void main() { // Source String source = 'Hello! Cześć! 你好! ご挨拶!Привет! ℌ𝔢𝔩𝔩𝔬! 🅗🅔🅛🅛🅞!'; print(source.length.toString() + ': "' + source + '" (' + source.runes.length.toString() + ')'); // String (Dart uses UTF-16) to bytes var list = new List<int>(); source.runes.forEach((rune) { if (rune >= 0x10000) { rune -= 0x10000; int firstWord = (rune >> 10) + 0xD800; list.add(firstWord >> 8); list.add(firstWord & 0xFF); int secondWord = (rune & 0x3FF) + 0xDC00; list.add(secondWord >> 8); list.add(secondWord & 0xFF); } else { list.add(rune >> 8); list.add(rune & 0xFF); } }); Uint8List bytes = Uint8List.fromList(list); // Here you have `Uint8List` available // Bytes to UTF-16 string StringBuffer buffer = new StringBuffer(); for (int i = 0; i < bytes.length;) { int firstWord = (bytes[i] << 8) + bytes[i + 1]; if (0xD800 <= firstWord && firstWord <= 0xDBFF) { int secondWord = (bytes[i + 2] << 8) + bytes[i + 3]; buffer.writeCharCode(((firstWord - 0xD800) << 10) + (secondWord - 0xDC00) + 0x10000); i += 4; } else { buffer.writeCharCode(firstWord); i += 2; } } // Outcome String outcome = buffer.toString(); print(outcome.length.toString() + ': "' + outcome + '" (' + outcome.runes.length.toString() + ')'); }
测试结果:
52: "Hello! Cześć! 你好! ご挨拶!Привет! ℌ𝔢𝔩𝔩𝔬! 🅗🅔🅛🅛🅞!" (43) 52: "Hello! Cześć! 你好! ご挨拶!Привет! ℌ𝔢𝔩𝔩𝔬! 🅗🅔🅛🅛🅞!" (43)
Run it online
kxxlusnw5#
试试这个代码:
String uint8ListToHexString(Uint8List uint8list) { var hex = ""; for (var i in uint8list) { var x = i.toRadixString(16); if(x.length == 1){ x = "0$x"; } hex += x; } return hex;
}
fbcarpbf6#
这对我很有用
final Uint8List fileData = const Utf8Encoder().convert('My String Value');
6条答案
按热度按时间ddrv8njm1#
我想应该是这样的:
v7pvogib2#
回答具体问题。我没有用过密码程序,找不到文件。但如果它只是返回原始字节,那么这些字节最好编码为十六进制或base64。
看看CryptoUtils.bytesToBase64和CryptoUtils. bytesToHex。
要回答标题中的一般问题,如果Uint 8List包含UTF8文本,请使用dart:convert库中的utf8.decode()。请参阅API文档。
fromCharCodes()接受一个UTF-16代码单元列表作为输入。
另请参阅LATIN 1,当输入< 0xFF时,它的行为与String.fromCharCodes相同。
4c8rllxm3#
fjnneemd4#
Dart使用UTF-16来存储
String
s。目前在Dart中,还没有简单的方法可以轻松地将其转换为字节并向后转换。因此,您可以使用原始计算将String
转换为Uint8List
并向后转换。Dart代码:
测试结果:
Run it online
kxxlusnw5#
试试这个代码:
}
fbcarpbf6#
这对我很有用