C#的Encoding.UTF8.GetBytes问题

DrSmart 2011-11-05 01:51:03
C#的Encoding.UTF8.GetBytes,和Java的编码上有很多不同。



Encoding.UTF8.GetBytes("中国") 返回 288 184 173 229 155 189
而Java上的 "中国".getBytes("UTF-8") 返回 -28 -72 -83 -27 -101 -67

由于Java服务器已经成型了,不能修改,如何让C#在性能保证下,输出byte型的字节。逐个字节转换不太现实,有什么标记设置没,不怎么用c#
...全文
7104 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cd279016423 2014-07-03
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
什么话?!你以为java的byte就是有符号的? 世界上哪有什么有符号的byte?你自己对java“输出”数据的理解出了问题。
求问C语言的byte没符号吗?
sdl2005lyx 2011-11-06
  • 打赏
  • 举报
回复
有一篇整理得非常好的文章:

string和byte[]的转换 (C#)
youzelin 2011-11-05
  • 打赏
  • 举报
回复
恩,是符号问题。两者的数据类型不一样
liuyonghong159632 2011-11-05
  • 打赏
  • 举报
回复
有意思。。。。
DrSmart 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]
什么话?!你以为java的byte就是有符号的?

世界上哪有什么有符号的byte?你自己对java“输出”数据的理解出了问题。
[/Quote]

晕,java的手册上写的很清楚啊,byte的范围是 -128到127啊,类似c++中的char型啊,我计算机原理,补码学习的没问题,只是想知道c#有什么更科学的输出方法,不过感谢sp1234的热心回复,就是奇怪。
DrSmart 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sp1234 的回复:]
这就是一个打印输出问题,跟数据本身完全没有关系。
[/Quote]

符合在组合四字节的int时会存在很大的差异的。搞定了,用sbyte好了,
黄亮 2011-11-05
  • 打赏
  • 举报
回复
C#中所有数据类型都区分有符合和无符合,只是byte比较特殊默认无符合,有符合带s。
其他默认有符号,而无符合的带u
黄亮 2011-11-05
  • 打赏
  • 举报
回复
C#有带符号型和无符号型byte,默认是无符号型,你可以强制转换为带符号型
sbyte

如下
 var array = new byte[]{228, 184, 173, 229, 155, 189};
var value = Array.ConvertAll(array,b=>(sbyte)b);
foreach (sbyte v in value)
Console.Write(v+" ");
  • 打赏
  • 举报
回复
这就是一个打印输出问题,跟数据本身完全没有关系。
宝_爸 2011-11-05
  • 打赏
  • 举报
回复
Byte字面理解确实应该是无符号的。
  • 打赏
  • 举报
回复
什么话?!你以为java的byte就是有符号的?

世界上哪有什么有符号的byte?你自己对java“输出”数据的理解出了问题。
DrSmart 2011-11-05
  • 打赏
  • 举报
回复
晕,c#的byte原来是无符号的,嗨,微软的设计.....
  • 打赏
  • 举报
回复
如果你一定要知道.net如何“转换”,你可以这样测试一下:
int x=-28;
byte y=(byte)x;


关键是,你纠结在什么“输出”上,我估计你是只相信眼睛(只在某个编码输出的控制台上去看)而不相信自己的大脑。
  • 打赏
  • 举报
回复
唉,让我说你什么好呢?既然你都“纵贯”.net和java了,难道没有走过正规的计算机原理和编程初步的培训么?

int的-28就是byte的228,它们是同一个东西。

我只好叹息了。

111,113

社区成员

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

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

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