怎样给将int 的某一个字节的值取出赋给一个UCHAR型的变量

weiyiabout 2008-04-10 11:11:13
我先把数存到文件中
FILE *fWrite;
fWrite = fopen("text.txt","w+b");//二进制

写时用:
int p = 20;
fprintf(fWrite,"%d",p);
读出来的时候,我想只取p的最低位的字节
并把值赋给unsigned char型的变量中,应该怎么做?
谢谢!
...全文
179 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiyiabout 2008-04-10
  • 打赏
  • 举报
回复
这是我想一次写进去的46 41 41 46 46 58 46 46 41 46 46 41 29 41 29 41
用fprintf(),用二进制格式打开文件可以得到对应的这些数据
用fwrite()
fwrite(&p,sizeof(int),1,fWrite);
就是这些东西了
.))..:..
这是怎么回事?
whoho 2008-04-10
  • 打赏
  • 举报
回复
如果用fwrite写入也要注意,在不同平台上,int的字节数不同,字节序也不同
如果是在一个little-endian的平台上,你用fread取到的第一字节就是最低字节

int data = 0xaabbccdd
fwrite(...)

unsigned char ch;
fread(...);//读至ch

则ch==dd
Treazy 2008-04-10
  • 打赏
  • 举报
回复

FILE *fp;
fp = fopen("text.txt","w+b");//二进制

int p = 20;
fprintf(fp,"%d",p);

fseek( fp, 0L, SEEK_SET );

/* Read data back from file: */
fscanf( fp, "%d", &p);

unsigned char a = (unsigned char)(p & 0xff);

weiyiabout 2008-04-10
  • 打赏
  • 举报
回复
fprintf写出去的都是文本文件,要写二进制用fwrite。
既然是文本,那你也只能用对应scanf再读进来,然后再取最低一个字节,跟0xff按位与一下就是了。
////////////////////////////////////////////////
跟0xff按位与之后返回的就是一个字节的类型了吗?比如说要返回unsigned char类型的
whoho 2008-04-10
  • 打赏
  • 举报
回复
二进制文件本来就不适合用fprintf写入

当然写入也可以,你读出来以后就还得用fscanf出一个整数
int data;
unsigned char ch;

fscanf(...)

ch = (unsigned char)data; //这是取得最低字节的最简单方法
kevinchj 2008-04-10
  • 打赏
  • 举报
回复
不明白 或者我理解错了 继续问^
晨星 2008-04-10
  • 打赏
  • 举报
回复
fprintf写出去的都是文本文件,要写二进制用fwrite。
既然是文本,那你也只能用对应scanf再读进来,然后再取最低一个字节,跟0xff按位与一下就是了。
kevinchj 2008-04-10
  • 打赏
  • 举报
回复
比如你想去最低的一位 就是并1

(unsigned char)p&1

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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