关于Encoding.Unicode.GetBytes字符和字节转换的问题。

zxrjx 2008-01-07 06:02:48
为何运行
System.Text.Encoding.Unicode.GetBytes(System.Text.Encoding.Unicode.GetString(new byte[]{29,223}))
得到结果为:
[0]: 253
[1]: 255
应该是29,223才对。OS使用windows 2003 en版本
...全文
1427 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
magichao1212 2010-07-22
  • 打赏
  • 举报
回复
mark
zxrjx 2008-01-10
  • 打赏
  • 举报
回复
谢谢各位的参与,今天结贴。
VirtualDesktop 2008-01-08
  • 打赏
  • 举报
回复
原来你要这样
{29,223}不是有效的unicode编码,转换后系统会自动“纠正”,因此,转换回来数据就会损坏
其实你可以直接把byte数据写进文件流再保存即可,很方便的
zhouxian0518 2008-01-08
  • 打赏
  • 举报
回复
学习
wuzy1229 2008-01-08
  • 打赏
  • 举报
回复
zxrjx的是个好办法
viena 2008-01-08
  • 打赏
  • 举报
回复
sorry,转为16进制,再转回就比较麻烦了,没有直接的方法
最好的是用Base64编码,很简单,转字符串与转回都有直接方法可用
Convert.ToBase64String
Convert.FromBase64String
viena 2008-01-08
  • 打赏
  • 举报
回复
string str = BitConverter.ToString(new byte[]{29,223});
viena 2008-01-08
  • 打赏
  • 举报
回复
不如转为16进制字符串写文件
zxrjx 2008-01-07
  • 打赏
  • 举报
回复
一个方法:直接把加密后的byte[]写到文件中去。不需要额外的字符串转换。

binaryWriter.Write(data)把byte[] data写到文件。
fileStream.Read(data,0,data.Length)从文件读到data。
这倒是个方法, 明天试一下。
加密成字节还真麻烦。
^_^
Efcndi 2008-01-07
  • 打赏
  • 举报
回复
一个方法:直接把加密后的byte[]写到文件中去。不需要额外的字符串转换。

binaryWriter.Write(data)把byte[] data写到文件。
fileStream.Read(data,0,data.Length)从文件读到data。
zxrjx 2008-01-07
  • 打赏
  • 举报
回复
System.Text.Encoding.Unicode.GetBytes(System.Text.Encoding.Unicode.GetString(new byte[]{29,223}))
之所以这样用,是因为加密模块使用到,文本加密后得到byte[16]数组,转换System.Text.Encoding.Unicode.GetString(new byte[32]{})后存储为加密文件,然后解密时再使用System.Text.Encoding.Unicode.GetBytes把加密文本转换回来,结果就出现了以上错误结果。导致无法获取正确的加密文本。
lwl0376 2008-01-07
  • 打赏
  • 举报
回复
关注
大正他爹 2008-01-07
  • 打赏
  • 举报
回复
UP
kbryant 2008-01-07
  • 打赏
  • 举报
回复
关注,,学习
Efcndi 2008-01-07
  • 打赏
  • 举报
回复
补上:29,223-》DE1D。是未使用的。
Efcndi 2008-01-07
  • 打赏
  • 举报
回复
http://wiki.keyin.cn/index.php/Unicode%E7%BC%96%E7%A0%81%E8%A1%A8/1000-1FFF

29,223-》1DDE。是未使用的。
viena 2008-01-07
  • 打赏
  • 举报
回复
new byte[]{29,223}
并非有效的Unicode编码,当然不可以转为字符串再转回来~
techxuan 2008-01-07
  • 打赏
  • 举报
回复
byte[] buf = new byte[] { 223 };
string s = System.Text.Encoding.Unicode.GetString(buf);
byte[] buf1 = System.Text.Encoding.Unicode.GetBytes(s);
得到结果为:
[0]: 253
[1]: 255
奇怪就是223怎么会由一个字节变成2个字节了
OS使用windows 2003 中文版本
VirtualDesktop 2008-01-07
  • 打赏
  • 举报
回复
这个和unicode的编码规则有关的
VirtualDesktop 2008-01-07
  • 打赏
  • 举报
回复
byte[] byt = System.Text.Encoding.Unicode.GetBytes(System.Text.Encoding.Unicode.GetString(new byte[] { 0,29, 223,0 }));

110,536

社区成员

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

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

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