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
字符串转成字节数组有其它方法吗?
想出个很低级的方法勉强能用,期待更好的方法
展开
 我来答
空雪梦见
2013-05-28 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1201万
展开全部
目测先把 "一般客户" 转成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;
更多追问追答
追问
这就是个例子,是很长一个字符串,不知道其中什么位置会出汉字,什么位置会出\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就转一次,

像这样


ioiozzm
2013-05-29 · TA获得超过232个赞
知道答主
回答量:91
采纳率:0%
帮助的人:77万
展开全部
首先你知道对于你的电脑来说default编码是指什么编码么??

63是问号,对于某些编码来说,读不出来的就用?号表示。

\xff=255=ÿ

然后出来的就是63了。

你把\xff作为间隔符号去掉,或者用\0替换掉,看看行不行。
更多追问追答
追问
谢谢,我是在网上接收的一大串字符串,里面有汉字,也有些像\xff的符号,我再变成字节数据想发送出去,然后就出现了很多63,有没有什么好一点的办法,能正确的把字符串转成字节数组~~
追答
你是想去掉63?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

2013-05-28 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
PCFAN9999
2013-05-28 · TA获得超过3683个赞
知道小有建树答主
回答量:1553
采纳率:50%
帮助的人:503万
展开全部
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); // 这两个次序可能要调换。
}
。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式