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);
} 展开
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);
} 展开
3个回答
展开全部
你的这段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数组就行了
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#,就不要再用指针了吧。。。
展开全部
c#学到这地步了,赞一个!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符 可以直接转换成 byte???
更多追问追答
追问
文件里都是字节流呀 。不光字符,所有类型在文件里都是010101之类的
追答
这个
byte[] pc = new byte[4];
pc[0] = 'a';
pc[1]='b';
pc[2]='c';
编译能通过?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询