急,请教一个位操作的问题

verymorose 2004-07-19 12:45:18
请问各位,望不吝赐教:
怎么用8个ASCII码组成的字符串,去掉每个ASCII字符最前边一位的0,(剩7位,一共7*8=56位)重新组成一个7字节长的字符串?
急,拜托了
...全文
164 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
TalosChen 2004-07-19
  • 打赏
  • 举报
回复
不好意思,一时疏忽。
不客气。
verymorose 2004-07-19
  • 打赏
  • 举报
回复
好像应该是bit[i]=tmp>>7
多谢了
verymorose 2004-07-19
  • 打赏
  • 举报
回复
main(){
char a='a';
char tmp;
int i;
unsigned char bit[8];
for(i=0;i<8;i++){
tmp=a<<i;
bit[i]=tmp>>8;
}
a='1';
for(i=0;i<8;i++){
a|=bit[i]<<(7-i);
}
printf("%c\n",a);
}
楼上的哥们,不好使阿,打印出来是一个乱字符
TalosChen 2004-07-19
  • 打赏
  • 举报
回复
char a='a';
unsigned char bit[8];
for(i=0;i<8;i++){
tmp=a<<i;
bit[i]=tmp>>8;
}
这是将a的八位从高到低依次放入bit[8]中,即bit[0]为最高位。
for(i=0;i<8;i++){
a|=bit[i]<<(7-i);
}
这是第二个例子
应该够清楚了吧
freefalcon 2004-07-19
  • 打赏
  • 举报
回复
void main()
{
char a[8] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
char b[7];

for(int i=0; i<7; i++)
b[i] = (a[i] << (i+1) ) | ( ((unsigned char)a[i+1]) >> (6-i) );

}
verymorose 2004-07-19
  • 打赏
  • 举报
回复
比如说如何把一个字符的八位拆开,把每一位写入一个字符变量
以及如何把8个由0和1组成字符,合起来写入一个字符变量

拜托了,就给上边两个例子好吗
verymorose 2004-07-19
  • 打赏
  • 举报
回复
我是新手,对位操作不熟悉阿,能不能给一点例子阿,多谢了
我不是做DES
TalosChen 2004-07-19
  • 打赏
  • 举报
回复
先用一个56位的数组,如 unsigned char bit[56] 将这56位用位运算符>>或<<写到这个数组里(一位对应数组中的一个元素),然后再依次将这已读出的56未写入最终的7字节字符串即可。具体做的时候,可以先将bit[56]七位一组,写一个循环依次处理要处理的八个字符。然后再八位一组,依次写入最终的字符串。
ps.你要做的是DES吗?
verymorose 2004-07-19
  • 打赏
  • 举报
回复
急啊,怎么没人回答,急死我了,拜托了

69,371

社区成员

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

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