C# 中 byte[]转换成string 型 打印输出乱码 c#乱码encodingstring 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能用Ascii转要么用GB2312 要么UTF8转码一般是中文字符吧。 你得转成ansi的才行,如果打印机支持unicode的话,就转成这个 如果你想转成string的话,那么你的byte[]里的值,也要是从string里转过来,并且string转化成byte[] 和byte[]转换成string,要用同样的encoding。直接放在byte[]里面的两个值,这么转是转不过来的。 我用 byte[] bytHeadOfBag = new Byte[2] { 0xff, 0xef }; //包开始标识 string strHeadOfBag = Convert.ToString(bytHeadOfBag[0]) + Convert.ToString(bytHeadOfBag[1]);显示出来的是0xff 0xef 的16进制的值,并不是它本身 我用的是同样encoding的 byte[] bytHeadOfBag = new Byte[2] { 0xff, 0xef }; //包开始标识 string strHeadOfBag = Convert.ToString(bytHeadOfBag[0]) + Convert.ToString(bytHeadOfBag[1]);这样的结果把 strHeadOfBag 打印出来是255239 你这两个字byte应该是文件签名吧。看你的变量名也像是某头标记如果你那个是从文本文件记取的话,按下面这个表,你应该使用UTF-16 Little Endian编码方式进行读写转换Encoding Representation UTF-8 EF BB BF UTF-16 Big Endian FE FF UTF-16 Little Endian FF FE UTF-32 Big Endian 00 00 FE FF UTF-32 Little Endian FF FE 00 00 数据包是数据包,你不能把它整个当成字符串,而应该先代码去判断,解析,拆分,把里面是字符串的部分转字符串,不是字符串的部分就应该对应的去处理,而不是统一按字符串处理假如包里有连续4个字节表示一个int,你转成字符串之后变成啥了?? 如果你需要TCP拆包器可以参考.http://blog.csdn.net/daonidedie/article/details/30712087 我是想字符串能够加起来当做一个整体包,如果都是byte[]型,那怎么打包呢? 我是想字符串能够加起来当做一个整体包,如果都是byte[]型,那怎么打包呢?不明白你所谓"打包"是什么概念你能不能先理解什么是数据包,然后再去想你自己的"打包"方法? 非常感谢哦 懂了不少,我也去百度了解了下数据包的定义。是这样的:这个数据协议里面的各个标识有byte型的也有string型的,最后数据包通过串口或者网络发送出去是byte[]型,拼包我觉得有两种方式,1.先都转换成string型,拼包,再转换成byte[]发送出去;2.直接把string标识都转换成byte[],拼包发送;我(甲方)做的是发送端。数据包解析是乙方,接收数据。 数据包在网络中传输,本来就都是二进制的,不存在字符串所以发送函数也只接受byte数组(二进制流)你应该将所有数据都分别转byte数组然后拼接数组而不是都转string因为很多数据类型都没法转成string的比如我前面举的例子,4个byte表示一个int假如是1,那么也应该表示为0x00,0x00,0x00,0x01你转成"1",再转回来还是4个byte吗 关于Winform如何在父窗体里面只能打开一个子窗体 datagridview有疑问!! 关于新闻分页 release下不会被编译的问题 #标题党#请问将数字转换为大写人民币金额式样。 我的winform程序打开后,再点击应用程序图标,会又打开一个。 在没有.NET框架的机器上是否能安装用C#编写的程序? 如何实现Treeview和Listview的有效结合 QQ和酷狗此类软件的滚动条滚动起来特别的顺畅,感觉还有慢慢减速的过程,不知道用WPF是如何实现的呢? 帮忙改改! 密码学求助 c# 操作 office2007给每一页添加不同的页眉
不能用Ascii转要么用GB2312 要么UTF8
转码一般是中文字符吧。
string strHeadOfBag = Convert.ToString(bytHeadOfBag[0]) + Convert.ToString(bytHeadOfBag[1]);
显示出来的是0xff 0xef 的16进制的值,并不是它本身 我用的是同样encoding的
byte[] bytHeadOfBag = new Byte[2] { 0xff, 0xef }; //包开始标识
string strHeadOfBag = Convert.ToString(bytHeadOfBag[0]) + Convert.ToString(bytHeadOfBag[1]);
这样的结果把 strHeadOfBag 打印出来是255239
如果你那个是从文本文件记取的话,按下面这个表,你应该使用UTF-16 Little Endian编码方式进行读写转换
Encoding Representation
UTF-8 EF BB BF
UTF-16 Big Endian FE FF
UTF-16 Little Endian FF FE
UTF-32 Big Endian 00 00 FE FF
UTF-32 Little Endian FF FE 00 00
假如包里有连续4个字节表示一个int,你转成字符串之后变成啥了??
http://blog.csdn.net/daonidedie/article/details/30712087
不明白你所谓"打包"是什么概念
你能不能先理解什么是数据包,然后再去想你自己的"打包"方法?
是这样的:这个数据协议里面的各个标识有byte型的也有string型的,最后数据包通过串口或者网络发送出去是byte[]型,拼包我觉得有两种方式,1.先都转换成string型,拼包,再转换成byte[]发送出去;2.直接把string标识都转换成byte[],拼包发送;我(甲方)做的是发送端。数据包解析是乙方,接收数据。
所以发送函数也只接受byte数组(二进制流)你应该将所有数据都分别转byte数组然后拼接数组
而不是都转string
因为很多数据类型都没法转成string的
比如我前面举的例子,4个byte表示一个int
假如是1,那么也应该表示为0x00,0x00,0x00,0x01
你转成"1",再转回来还是4个byte吗