C# string 转 byte[]问题
我用response=(HttpWebResponse)request.GetResponse();接收一条数据。再转发出去,数据就变了,这是为什么呢stringtemp...
我用
response = (HttpWebResponse)request.GetResponse();接收一条数据。再转发出去,数据就变了,这是为什么呢
string tempchar="一般客户\xff"
byte[] post1 = Encoding .Default.GetBytes (tempchar );
我想得到这样的结果,可是总是不行,要么汉字编码不对,要么byte[8]=63(这个地方很奇怪??)
byte[0]=210
byte[1]=287
byte[2]=176
byte[3]=227
byte[4]=191
byte[5]=205
byte[6]=187
byte[7]=167
byte[8]=255
字符串转成字节数组有其它方法吗?
想出个很低级的方法勉强能用,期待更好的方法 展开
response = (HttpWebResponse)request.GetResponse();接收一条数据。再转发出去,数据就变了,这是为什么呢
string tempchar="一般客户\xff"
byte[] post1 = Encoding .Default.GetBytes (tempchar );
我想得到这样的结果,可是总是不行,要么汉字编码不对,要么byte[8]=63(这个地方很奇怪??)
byte[0]=210
byte[1]=287
byte[2]=176
byte[3]=227
byte[4]=191
byte[5]=205
byte[6]=187
byte[7]=167
byte[8]=255
字符串转成字节数组有其它方法吗?
想出个很低级的方法勉强能用,期待更好的方法 展开
5个回答
展开全部
目测先把 "一般客户" 转成byte[]
然后再附加0xff 即可解决问题
string tempchar="一般客户";
byte[] pre_post1 = Encoding.Default.GetBytes(tempchar); //default不行的话也可以直Encoding.GetEncoding("GB2312")就像楼下那样
byte[] post1 = new byte[pre_post1.Length+1];
pre_post1.CopyTo(post1, 0);
post1[pre_post1.Length] = (byte) 0xff;
然后再附加0xff 即可解决问题
string tempchar="一般客户";
byte[] pre_post1 = Encoding.Default.GetBytes(tempchar); //default不行的话也可以直Encoding.GetEncoding("GB2312")就像楼下那样
byte[] post1 = new byte[pre_post1.Length+1];
pre_post1.CopyTo(post1, 0);
post1[pre_post1.Length] = (byte) 0xff;
更多追问追答
追问
这就是个例子,是很长一个字符串,不知道其中什么位置会出汉字,什么位置会出\xff
追答
string tempchar = "一般客户\xff一般客户\xff一般客户\xff";
List<byte> ret = new List<byte>();
int st = 0, cur = 0;
int templen = tempchar.Length;
char[] tempchararr = tempchar.ToCharArray();
st = cur;
Encoding enc = Encoding.Default;
while (cur < templen)
{
if (tempchar[cur] == (char)0xff)
{
byte[] partret = enc.GetBytes(tempchararr, st, cur - st);
ret.AddRange(partret);
ret.Add((byte)0xff);
st = cur + 1;
}
++cur;
}
byte[] result = ret.ToArray();
原来是这种情况。那么分块转换可以吗,每找到一个0xff就转一次,
像这样
展开全部
首先你知道对于你的电脑来说default编码是指什么编码么??
63是问号,对于某些编码来说,读不出来的就用?号表示。
\xff=255=ÿ
然后出来的就是63了。
你把\xff作为间隔符号去掉,或者用\0替换掉,看看行不行。
63是问号,对于某些编码来说,读不出来的就用?号表示。
\xff=255=ÿ
然后出来的就是63了。
你把\xff作为间隔符号去掉,或者用\0替换掉,看看行不行。
更多追问追答
追问
谢谢,我是在网上接收的一大串字符串,里面有汉字,也有些像\xff的符号,我再变成字节数据想发送出去,然后就出现了很多63,有没有什么好一点的办法,能正确的把字符串转成字节数组~~
追答
你是想去掉63?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
byte[] post1=Encoding.GetEncoding("GB2312").GetBytes(tempchar);
追问
这个不行。结果中byte[8]=63.我就不明白,这个63是怎么来的??
追答
你确认一下,倒底是
string tempchar = "一般客户\xff一般客户\xff一般客户\xff";
还是
string tempchar = @"一般客户\xff一般客户\xff一般客户\xff";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-05-28
展开全部
编码不一样吧 检查一下Encoding
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string 16位unicode,byte 8位, 编码不一样。
int j=0;
byte[] b= new byte[s.length*2];
for (int i=0; i<s.length; i++)
{
ushort u=(ushort)s[i];
b[j++]=(byte)(u & 255);
b[j++]=(byte) (u >>8); // 这两个次序可能要调换。
}
。。。
int j=0;
byte[] b= new byte[s.length*2];
for (int i=0; i<s.length; i++)
{
ushort u=(ushort)s[i];
b[j++]=(byte)(u & 255);
b[j++]=(byte) (u >>8); // 这两个次序可能要调换。
}
。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询