linux 下write()函数和大家探讨。。。

xfox101 2005-08-03 05:20:02
我写了一个小程序,将一个int x[2] = {1 ,2} 这样的数组用write()函数写到一个文件里, 但是写入之后察看文件是乱码,乱码是^A^类似样式出现,最后缀一个@结束,察看一些资料发现说如果没有文件结束符就会自动后缀一个@。如果把数组改成char 类型就不会出现这个问题,文件中会正常现实数组内容。
但是write()的第二个参数是const void * (GNU/Linux 编程指南中说明)也就是说可以是任意类型都可以,难道使用write() 函数时,所有非char型数组都要转换成char 数组类型才可在write中使用么?小弟不明请大家指教。
...全文
1953 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
asphp 2005-08-10
  • 打赏
  • 举报
回复
可以位操作
char a[];
int b[];

for(...)
{
a[i]=b[i++]&0xff
}
  • 打赏
  • 举报
回复
学习
xfox101 2005-08-08
  • 打赏
  • 举报
回复
多谢tb0141, 我也想到这个问题了,char int两个类型字节数差了一倍,想用位操作法
转换(我的程序int数组值范围在1-20之间),但又牵扯到字节序的问题.看来只能一个
一个转换了,多谢大家
tb01412 2005-08-05
  • 打赏
  • 举报
回复
千万不能强制转换数组,否则就是乱码,用一个循环将每个元素转换成char型(切记,整形数值的范围是0-127之间,否则转换后将改变本身大小)
如果强制将整型数组转换成字符数组,相当于将指向整型数组的指针转换成了指向字符数组的提针,比如一个有十个数的整形数组转换成字符数组,那么那个字符数组必须要有四十个元素,不然就会产生内存溢出,其转换后的字符数组的值与原来整形数组的值有很大的改变,主要受到计算机存储字节的顺序有关,只要你想想计算机的大端字节序的原则,就明白你转换后的值了
xfox101 2005-08-05
  • 打赏
  • 举报
回复
如何才能把int 类型的数组转化成char类型的数组呢????
asphp 2005-08-04
  • 打赏
  • 举报
回复
write(fd,x,sizeof(x));
firstdreamer 2005-08-03
  • 打赏
  • 举报
回复
可以用类型强制转换试试看

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧