请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

中文编解码问题

/*************************************************
Function:       Encode8Bit
Description:    进行8Bit编码来压缩数据
Input:          tsSrc: 需要压缩的数据
Output:         pucDest: 压缩后的数据
Return:         压缩后的字节数
Others:         字符数值在0x00和0xFF之间字符串
压缩代码110
*************************************************/
int CISO15962::Encode8Bit(ubyte* pucDest, tstring tsSrc)
{
	if (pucDest == NULL || tsSrc.empty())
		return -1;
	mstring strSrc = t2a(tsSrc);
	int iLen = strSrc.length();
	strcpy_s((char*)pucDest, iLen+1, strSrc.c_str());
	return iLen;
}

如上,是一段C++的编码代码,我现在的需求是将一段字符串(包含中文)进行输入,用此方法进行编码,然后输出16进制的编码字符串,

  • 例如 输入
    ubyte uc8Back[128] = { 0 }; Encode8Bit(uc8Back, _T("五十多个"));
    编码后的16进制字符串为 CEE5CAAEB6E0B8F6 ,
  • 需求,我需要将此方法转为dart 的语言,我尝试用convert.Utf8Encoder().convert(),但是由于此方法不能编解码中文,所以失败。
  • 请问:dart 版本的方法该怎么写?

正在回答

2回答

试试这个,如果还是不行就没好的办法了
final str = '五十多个';
  final bytes = utf8.encode(str);
  final hexStr = hex.encode(bytes);
  print(hexStr);
0 回复 有任何疑惑可以回复我~
  • 提问者 那个逗号 #1
    非常感谢!可以了 谢谢老师
    回复 有任何疑惑可以回复我~ 2023-05-09 14:06:07
CrazyCodeBoy 2023-05-08 09:06:26
在Dart中,可以使用convert包中的Latin1Encoder和HexEncoder实现类似的功能。示例代码如下:

```dart
import 'dart:convert';

void main() {
  final str = '五十多个';
  final bytes = latin1.encode(str);
  final hexStr = hex.encode(bytes);
  print(hexStr); // 输出 CEE5CAAEB6E0B8F6
}
```

其中,`latin1.encode()`将字符串编码为Latin1字符集的字节数组(相当于C++中的8位编码);`hex.encode()`将字节数组编码为16进制字符串。

需要注意的是,这里使用的是Latin1编码而非UTF-8编码,因为C++中的`Encode8Bit`方法是将字符串转换为8位编码的。如果需要使用UTF-8编码,可以使用`utf8.encode()`方法代替`latin1.encode()`。
0 回复 有任何疑惑可以回复我~
  • 提问者 那个逗号 #1
    老师,感谢您的回复!
    测试utf8编解码可以支持中文,但由于要跟C++那边的编解码保持一致,而utf8编码出来的结果是不一致的,遂放弃,
    然后我尝试了您的答案,发现在  final bytes = latin1.encode(str); 会报错``` Invalid argument (string): Contains invalid characters.: "五十多个",``` 
    - 我目前的flutter版本是  ```Flutter 3.10.0-14.0.pre.2 • channel master • ,```
    回复 有任何疑惑可以回复我~ 2023-05-08 11:20:28
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信