BBS.ChinaUnix.net
今日推荐    首页 | 新闻 | Linux | AIX | 博客 | 论坛 | 存储 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 空间     
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


[C] 位操作高手请进。已解决,感谢兄弟们的帮助!
首页 » 论坛 » C/C++ »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
醉卧水云间
精灵使



UID:443805
注册:2006-7-19
最后登录: 2008-07-04
帖子:3283
精华:3

可用积分:1095
信誉积分:140
专家积分:10 (本版)

状态:...保密...

[个人空间] [短信] [博客]


顶部
41楼 发表于 2008-5-10 16:28 


QUOTE:
原帖由 titansword2000 于 2008-5-10 11:10 发表
回34楼,将其该为offset=7-(bitpos%之后,经解码后验证,发现其还是不对。从你的代码来看,应该是对的。问题能出在哪儿呢

我的代码是对的, 解码自己琢磨, 看来这个问题够你玩一阵了, 你慢慢玩啊



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
titansword2000   帅哥
精灵



UID:208011
注册:2004-12-15
最后登录: 2008-06-08
帖子:248
精华:0

可用积分:183
信誉积分:100
专家积分:0 (本版)

来自:山东
状态:...离线...

[个人空间] [短信] [博客]


顶部
42楼 发表于 2008-5-10 16:38 
我也觉得你的编码函数是对的。你看我发的那个解码函数不就是我说的那个意思,把后面的n_bits位连成一串吗?



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

用FB真好,有BF更好;
大家好才是真的好,好的真好.
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
zicfy
圣骑士
rankkkk




UID:185395
注册:2004-9-22
最后登录: 2008-05-10
帖子:107
精华:0

可用积分:106
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
43楼 发表于 2008-5-10 21:15 
结果跟我的程序比一下就知道是不是正确了



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

[hide]隐藏签名档.[/hide]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
cobras
精灵王



UID:350981
注册:2005-12-17
最后登录: 2008-07-02
帖子:341
精华:0

可用积分:355
信誉积分:100
专家积分:19 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
44楼 发表于 2008-5-10 22:22 
这个跟整数字节序是有关的嘛



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

个人博客:编程兴趣屋—http://cobras.cublog.cn

提供一些中文资料及软件下载
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
cobras
精灵王



UID:350981
注册:2005-12-17
最后登录: 2008-07-02
帖子:341
精华:0

可用积分:355
信誉积分:100
专家积分:19 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
45楼 发表于 2008-5-10 22:49 
void catbit(unsigned char *data,int *array,int n_array,int n_bits) {
        unsigned char *tmp_data;
        int bit_index;
        int int_data;
        int tmp_bits;
        int bit_mask;

        if (data != NULL && array != NULL && n_array > 0 && n_bits > 0) {
                if (n_bits > sizeof(int) * {
                        n_bits = sizeof(int) * 8;
                }
                bit_index = 0;
                bit_mask = 1 << (n_bits - 1);
                while (n_array-- > 0) {
                        int_data = array++ << (sizeof(int) * 8 - n_bits);
                        for (tmp_bits = n_bits; tmp_bits-- > 0 {
                                *tmp_data = &data[bit_index++ / 8];
                                if (int_data & bit_mask) {
                                        (*tmp_data)++;
                                }
                                *tmp_data <<= 1;
                                int_data <<= 1;
                        }
                }
        }
}



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

个人博客:编程兴趣屋—http://cobras.cublog.cn

提供一些中文资料及软件下载
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
涩兔子   帅哥 (sirtoozee)
精灵



UID:332502
注册:2005-11-5
最后登录: 2008-07-04
帖子:207
精华:0

可用积分:174
信誉积分:100
专家积分:4 (本版)

来自:Beijing
状态:...离线...

[个人空间] [短信] [博客]


顶部
46楼 发表于 2008-5-11 15:35 
等待最后的结贴,我好把正确答案收录起来



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

摘除了一根儿肋骨
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
tspy007
风云使者



CU奥运火炬传递手2008
UID:700549
注册:2008-5-4
最后登录: 2008-07-04
帖子:473
精华:0

可用积分:859
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
47楼 发表于 2008-5-12 14:33 
搞得太深奥了点吧



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
titansword2000   帅哥
精灵



UID:208011
注册:2004-12-15
最后登录: 2008-06-08
帖子:248
精华:0

可用积分:183
信誉积分:100
专家积分:0 (本版)

来自:山东
状态:...离线...

[个人空间] [短信] [博客]


顶部
48楼 发表于 2008-5-14 19:29 
经过几天的不断测试,发现醉卧水云间网友思路和代码是正确的,现将代码贴到下面:(仅仅修改了醉卧水云间网友的部分代码,感谢醉卧水云间对本人的支持)


void setbitpos(unsigned char *data, int bitpos, int bit)
{
    int byte=(bitpos)/8;
    int offset=7-(bitpos%8 );
    if(bitpos % 8 == 0)
        data[byte]=0x00;    //清空该内存地址中有可能存在的数据

    if(bit)
    {
        data[byte]|= (1<<offset);
    }
    else
    {
        data[byte]&= ~(1<<offset);
    }
}

void catbit(unsigned char *data,int *array,int n_array,int n_bits)
{
    unsigned int bitpos=0;

    for(int i=0;i<n_array;i++)
    {
        for(int j=n_bits-1;j>=0;j--)
        {
            int bit= array & (1 << j);

            setbitpos(data, bitpos++, bit);
        }
    }
}

[ 本帖最后由 titansword2000 于 2008-5-14 19:30 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

用FB真好,有BF更好;
大家好才是真的好,好的真好.
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
tspy007
风云使者



CU奥运火炬传递手2008
UID:700549
注册:2008-5-4
最后登录: 2008-07-04
帖子:473
精华:0

可用积分:859
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
49楼 发表于 2008-6-1 22:59 
怎么没人回贴呀



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布

首页 » 论坛 » C/C++ »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.060535 second(s), 4 queries , Gzip enabled