我有一个用C#编写的套接字TCP服务器。客户端请求为Encoding.Unicode.GetString(buffer,0,buffer.Length)。
我有一个用dart编写的客户端程序,该程序通过Socket.add命令发送String codeUnits。
我的问题是在C#Encoding.Unicode.GetString中每个字符读取2个字节...
我的问题是如何从dart到Unicode C#中反过来读取codeUnit?
String str = '3a487186711dc218';
在Dart中:
str.codeUnits = [51, 97, 52, 56, 55, 49, 56, 54, 55, 49, 49, 100, 99, 50, 49, 56];
在C#中:
Encoding.Unicode.GetBytes(str) = [51, 0, 97, 0, 52, 0, 56, 0, 55, 0, 49, 0, 56, 0, 54, 0, 55, 0, 49, 0, 49, 0, 100, 0, 99, 0, 50, 0, 49, 56]
答案 0 :(得分:0)
好的,我认为问题已经解决。
由于dart中的代码单位是Utf16(16位),因此我可以将每个单位转换为2字节数组:
List<int> convertCodeUnitsToUnicodeByteArray(List<int> codeUnits) {
ByteBuffer buffer = new Uint8List(codeUnits.length*2).buffer;
ByteData bdata = new ByteData.view(buffer);
int pos = 0;
for(int val in codeUnits) {
bdata.setInt16(pos, val, Endian.little);
pos += 2;
}
return bdata.buffer.asUint8List();
}
现在从Tcp套接字C#中,我正确地获得了Flutter应用程序发送的字符串。