linux 下write()函数和大家探讨。。。
我写了一个小程序,将一个int x[2] = {1 ,2} 这样的数组用write()函数写到一个文件里, 但是写入之后察看文件是乱码,乱码是^A^类似样式出现,最后缀一个@结束,察看一些资料发现说如果没有文件结束符就会自动后缀一个@。如果把数组改成char 类型就不会出现这个问题,文件中会正常现实数组内容。
但是write()的第二个参数是const void * (GNU/Linux 编程指南中说明)也就是说可以是任意类型都可以,难道使用write() 函数时,所有非char型数组都要转换成char 数组类型才可在write中使用么?小弟不明请大家指教。
问题点数:20、回复次数:7Top
1 楼firstdreamer()回复于 2005-08-03 22:12:56 得分 5
可以用类型强制转换试试看Top
2 楼asphp(AwaiLi)回复于 2005-08-04 10:29:18 得分 5
write(fd,x,sizeof(x));
Top
3 楼xfox101()回复于 2005-08-05 10:29:23 得分 5
如何才能把int 类型的数组转化成char类型的数组呢????Top
4 楼tb01412(tb)回复于 2005-08-05 11:12:21 得分 5
千万不能强制转换数组,否则就是乱码,用一个循环将每个元素转换成char型(切记,整形数值的范围是0-127之间,否则转换后将改变本身大小)
如果强制将整型数组转换成字符数组,相当于将指向整型数组的指针转换成了指向字符数组的提针,比如一个有十个数的整形数组转换成字符数组,那么那个字符数组必须要有四十个元素,不然就会产生内存溢出,其转换后的字符数组的值与原来整形数组的值有很大的改变,主要受到计算机存储字节的顺序有关,只要你想想计算机的大端字节序的原则,就明白你转换后的值了Top
5 楼xfox101()回复于 2005-08-08 10:27:29 得分 0
多谢tb0141, 我也想到这个问题了,char int两个类型字节数差了一倍,想用位操作法
转换(我的程序int数组值范围在1-20之间),但又牵扯到字节序的问题.看来只能一个
一个转换了,多谢大家Top
6 楼liuhaimiao()回复于 2005-08-10 13:04:32 得分 0
学习Top
7 楼asphp(AwaiLi)回复于 2005-08-10 14:04:45 得分 0
可以位操作
char a[];
int b[];
for(...)
{
a[i]=b[i++]&0xff
}Top




