c# filestream的读写问题

代码如下:byte[]pc=newbyte[4];pc[0]='a';pc[1]='b';pc[2]='c';pc[3]=(char)0;....FileStreamfi... 代码如下:
byte[] pc = new byte[4];
pc[0] = 'a';
pc[1]='b';
pc[2]='c';
pc[3]= (char)0;
....
FileStream fi;
.....
fi.Write(pc, 0, 4);

然后我打开文件里面存的是:
61 00 62 00

也就是只有ab
它自动当成双字来写了。

用什么方法才能单字写呢,也不会浪费空间
代码没打全。全部代码是:

IntPtr buffer = Marshal.AllocHGlobal(4);
char* pc = (char*)buffer;
pc[0] = 'a';
pc[1]='b';
pc[2]='c';
pc[3]= (char)0;
byte[] pcarr = new byte[4];
Marshal.Copy(buffer, pcarr, 0, pcarr.Length);
using (Stream fs = new FileStream(Application.StartupPath + @"\test1.dat", FileMode.OpenOrCreate))
{
fs.Write(pcarr, 0, 4);
}
展开
 我来答
vic_zc
2011-12-27 · TA获得超过235个赞
知道小有建树答主
回答量:228
采纳率:0%
帮助的人:277万
展开全部
你的这段C#代码编译能通过吗? pc[0] = 'a'; char 强转byte? 会报错吧。。。
byte[] pc = Encoding.UTF8.GetBytes(new char[]{'a','b','c',(char)0},0,4);
using (FileStream fs = new FileStream(@"c:\test.txt", FileMode.CreateNew, FileAccess.ReadWrite))
{
fs.Write(pc, 0, pc.Length);
}
这几行代码应该能满足你的要求吧。。。如果是单个写的话,修改一下GetBytes中的char数组就行了
更多追问追答
追问
IntPtr buffer = Marshal.AllocHGlobal(4);
char* pc = (char*)buffer;
pc[0] = 'a';
pc[1]='b';
pc[2]='c';
pc[3]= (char)0;
byte[] pcarr = new byte[4];
Marshal.Copy(buffer, pcarr, 0, pcarr.Length);
追答
不这么写不会省空间啊。。一个char是两个byte。。按照你的写法,你写完了四个char肯定会占8 bytes的空间。。。如果是按照我的那种写法,利用encoding转成byte数组的话,最后写道文件中的只有4 bytes。。
顺便说一句。。既然用的是C#,就不要再用指针了吧。。。
leiyangbdwk
2011-12-27 · TA获得超过3295个赞
知道大有可为答主
回答量:4975
采纳率:12%
帮助的人:4400万
展开全部
c#学到这地步了,赞一个!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4c688e6
2011-12-27 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:94.1万
展开全部
字符 可以直接转换成 byte???
更多追问追答
追问
文件里都是字节流呀 。不光字符,所有类型在文件里都是010101之类的
追答
这个
byte[] pc = new byte[4];
pc[0] = 'a';
pc[1]='b';
pc[2]='c';
编译能通过?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式