将codeunits dart转换为Encoding.Unicode C#

时间:2019-04-10 09:17:56

标签: c# dart

我有一个用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]

1 个答案:

答案 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应用程序发送的字符串。