新手提问:怎样从文本里提取每个字节的最后三位(急)

qizi168 2004-10-26 03:56:41
小弟从文本里取数据,比如一个文本内容是0123,二进制方式读取是0011 0001 0011 0000 0011 0010 0011 0011(十六进制的30 31 32 33),现在做到的是取每两个字节的最后两位并放在一个字节里,然后写入二进制文件。即:00 01 10 11 ,那么现在小弟得问题是:如果文本里面是4 5 6 7 怎么办?也就是每个数由3位表示(0011 0100......(34)),我怎么做到取最后三位然后写入到一个二进制文件里?
好像写入二进制文件的时候必须一个个字节的写吧?每个字节都是4位吧?
急,请各位大虾帮忙!
...全文
280 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
playmud 2004-10-28
  • 打赏
  • 举报
回复
char a=125?????
ra3 2004-10-28
  • 打赏
  • 举报
回复
用位运算符“与”& 0x07 就可以了。
例:
char a = 125;

char c = a & 0x07;

yangfasheng 2004-10-28
  • 打赏
  • 举报
回复
Mark!等一下看,
qizi168 2004-10-27
  • 打赏
  • 举报
回复
明天上班试试,成功立刻给分 谢谢各位
kenyle 2004-10-26
  • 打赏
  • 举报
回复
a11|a12|a13|a14
a21|a22|a23|a24
a31|a32|a33|a34
a41|a42|a43|a44

用线性的下角标方法,
作一个方向位判断 如果是=>这样的话,用列加一操作。
如果是‖
∨用行加一操作。
如果是<=用列减1操作。

如果是‖用行减1操作。
sharkhuang 2004-10-26
  • 打赏
  • 举报
回复
与3或者位移都可以
Visual_Li 2004-10-26
  • 打赏
  • 举报
回复
半同水正解,偶来抢分:))))
  • 打赏
  • 举报
回复
unsigned char c1,c2;
char c;
int count = 0;
c = fgetc(fp);
c1 = c<<5;
++ count ;
while(c = fgetc(fp))
{
c2 = c<<5;
if(count == 0)
{
c1 = c2;
++ count;
}
else if(count == 1)
{
c2 = c2 >>3;
c1 &= c2;
fputc(c1,outfile);
++ count;
}
else
{
c2 = c2 >> 6;
c1 &= c2;
fputc(c1,outfile);
c1 = c<<7;
count = 0;
}
if(feof(fp)) break;
}
  • 打赏
  • 举报
回复
你的问题可解决:
unsigned char c1,c2;
char c;
int count = 0;
c = fgetc(fp);
c1 = c<<5;
++ count ;
while(c = fgetc(fp))
{
c2 = c<<5;
if(count == 0)
{
c1 = c2;
++ count;
}
else if(count == 1)
{
c2 = c2 >>3;
c1 &= c2;
fputc(c1,outfile);
++ count;
}
else
{
c2 = c2 >> 6;
c1 &= c2;
fputc(c1,outfile);
c1 = c<<7;
count = 0;
}
if(feof(infile)) break;
}
  • 打赏
  • 举报
回复
我没看出你的规律来,0011 0001 (31)==>00 01
pomelowu 2004-10-26
  • 打赏
  • 举报
回复
你可以把每个BYTE都和0111做一次&操作,就得到0xxx这种格式的最后3位了,如果用结构体或者类成员的话,你可以只用3位来接受这个结果。不过输出的时候还是用字节的。
struct Node
{
int a:3;
};
lynnboy 2004-10-26
  • 打赏
  • 举报
回复
空一位吧。4位4位放
大道如海 2004-10-26
  • 打赏
  • 举报
回复
我只能通过代码改,发点代码上来!
xuzheng318 2004-10-26
  • 打赏
  • 举报
回复
先抢个1楼,思考中

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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