string转窄字符char[]等同的byte[] ,怎么不受编码影响

eesprite 2010-10-31 06:18:49
标题没看懂吧,

C/C++中有个很飘逸的操作 "\xB2\x00\x90\x90\x90\x90" ,像这样的字符窜直接当成byte[]用,

但是在Encoding的GetBytes方法无论哪个编码都无法正确转换成正确的byte ,上述字符窜转成 new byte[] { 0xb2, 0x00, 0x90, 0x90, 0x90, 0x90 }, 在转编码的过程中总会受到影响, 不是大小不同就是转成其他东西,也和C#本身编码有关吧,有没有简单有效的转换方法正确转换。
...全文
86 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
eesprite 2010-10-31
  • 打赏
  • 举报
回复
回复2:
memcpy,WriteProcessMemory 用这种操作的还是不少的,
C#在做平台调用的时候经常需要很多重载,我觉得在这个时候要求太严格就有点麻烦了,搞的要根据需要写很多重载,因为有些内存中的表现形式不一样,必须得封送。

3楼这个就直接是全部转义成字符窜了,那还是直接用byte数组直接点
机器人 2010-10-31
  • 打赏
  • 举报
回复

string strInput = @"\xB2\x00\x90\x90\x90\x90";
strInput = strInput.Replace("\\","");
char[] spliter = new char[] {'x'};
string[] strs = strInput.TrimStart(spliter).Split(spliter);
byte[] bytes = new byte[strs.Length];

for (int i = 0; i < strs.Length; i++)
bytes[i] = Convert.ToByte(strs[i], 16);
  • 打赏
  • 举报
回复
反过来说把,如果设计者懂传递字符串的规范,才应该传递字符串。例如设计者在文档中说清楚通讯时对于字符串是使用Ascii还是Utf8(等等),这样两边就知道去了解不清楚的知识。如果一段喜欢飘逸地“\xB2”,而另一端不知道它到底是什么字符串,就相当于火星人的语言了。
  • 打赏
  • 举报
回复
字符串?你为什么不想想c++该不该规范一点呢?

如果是传byte[],那么让用c++的人得意地用所谓飘逸字符串传送数据,而.net还是正常地接收byte[]数据就行了,干嘛画蛇添足地Encoding.xxx.GetBytes操作?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧