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


[C] 位操作高手请进。原本以为已经没问题了,可发现仍未解决
首页 » 论坛 » C/C++ »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
titansword2000   帅哥
精灵



UID:208011
注册:2004-12-15
最后登录: 2008-05-10
帖子:237
精华:0

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

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

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


顶部
1楼 发表于 2008-5-2 08:21 
请教:如何将一整数数组中的数据后n个位连成一串?

现假设整数数组的数据如下,取整数的后11位,同时,为书写方便,省略了整数的前16个高位:
data[0]=0000 0111 0001 1010
data[1]=0000 0101 1010 0011
data[2]=0000 0110 1100 0111
......
data[n]=**** **** **** ***

则要求连接后的形串为(方括号在实际串中没有):
[111 0001 1010] [101 1010 0011] [110 1100 0111] ......    ......
第一个的后11位    第二个的后11位    第三个的后11位   ......  第n个的后11位


上述功能是与下面代码相反的:
for(i=0;i<n;i++)
    {while(t_bits < n_bits)
          {tbits = (tbits * 256) + *bits++;
            t_bits += 8;
           }
       t_bits -= n_bits;
       flt = (tbits >> t_bits) & jmask;
      }

可以根据上面代码写出相反代码,也可以写一单独函数,函数定义如下:
void catbit(unsigned char *data,int *array,int n_array,int n_bits)
{......
.......
}
其中data用来存放连接起来的串,array为整形数组,n_array为整形树组内数的个数,n_bits为取整数的后bit位。


兄弟们给点帮助吧,这个地方已经耽误很多天了,一直没朋友写出相应的反函数或反代码。

[ 本帖最后由 titansword2000 于 2008-5-9 16:44 编辑 ]



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

__________________________________

用FB真好,有BF更好;
大家好才是真的好,好的真好.
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女
a8e8c1ca5b   帅哥 (被遗忘的漏洞)
精灵王



UID:353979
注册:2005-12-24
最后登录: 2008-05-13
帖子:301
精华:0

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

来自:广州
状态:...离线...

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


顶部
2楼 发表于 2008-5-2 11:56 
用位移吧



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

__________________________________

崇拜Linus Torvalds的技术
更崇拜盖茨的成功~~~~~~

http://blog.freebug.org/ 欢迎访问我的BLOG  
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女
titansword2000   帅哥
精灵



UID:208011
注册:2004-12-15
最后登录: 2008-05-10
帖子:237
精华:0

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

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

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


顶部
3楼 发表于 2008-5-2 12:56 
肯定得用位移,问题是怎么移?我想定义函数的原型如下:
void catbit(unsigned char *data,int *array,int n_array,int n_bits)
{......
.......
}

其中data用来存放连接起来的串,array为整形数组,n_array为整形树组内数的个数,n_bits为取整数的后bit位。



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

__________________________________

用FB真好,有BF更好;
大家好才是真的好,好的真好.
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女
SCys   帅哥
侠客




UID:326957
注册:2005-10-23
最后登录: 2008-05-09
帖子:32
精华:0

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

状态:...离线...

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


顶部
4楼 发表于 2008-5-2 13:11 
这么移位会不会改变类型的?
unsigned long long 昨天给一个这样的类型搞到死~



您对本贴的看法:鲜花[0] 臭蛋[0]
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女
titansword2000   帅哥
精灵



UID:208011
注册:2004-12-15
最后登录: 2008-05-10
帖子:237
精华:0

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

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

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


顶部
5楼 发表于 2008-5-2 13:21 
我最终的数据是存放在data中,它是无符号字符类型,只要有它的首地址就可以把它的数据按规定再提取出来,



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

__________________________________

用FB真好,有BF更好;
大家好才是真的好,好的真好.
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女
titansword2000   帅哥
精灵



UID:208011
注册:2004-12-15
最后登录: 2008-05-10
帖子:237
精华:0

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

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

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


顶部
6楼 发表于 2008-5-3 07:08 
看的人不少,回的朋友不多,继续等待中



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

__________________________________

用FB真好,有BF更好;
大家好才是真的好,好的真好.
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女
j1111011
精灵王




UID:430376
注册:2006-6-13
最后登录: 2008-05-13
帖子:282
精华:1

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

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

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


顶部
7楼 发表于 2008-5-3 13:41 
换成字符串再来操作怎么样,
number -> 二进制 -> string
string | cut -16 ,
.....
string ... | cat
string -> number //如有需要可再换成数.



您对本贴的看法:鲜花[0] 臭蛋[0]
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女
titansword2000   帅哥
精灵



UID:208011
注册:2004-12-15
最后登录: 2008-05-10
帖子:237
精华:0

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

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

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


顶部
8楼 发表于 2008-5-3 20:11 
目前我没想到什么合适的方法,请大家在说明方法的同时最好能写出象下面这样的一个函数:
void catbit(unsigned char *data,int *array,int n_array,int n_bits)
{......
.......
}

其中data用来存放连接起来的串,array为整形数组,n_array为整形树组内数的个数,n_bits为取整数的后bit位。



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

__________________________________

用FB真好,有BF更好;
大家好才是真的好,好的真好.
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女
titansword2000   帅哥
精灵



UID:208011
注册:2004-12-15
最后登录: 2008-05-10
帖子:237
精华:0

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

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

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


顶部
9楼 发表于 2008-5-4 09:02 
问题还没解决,得顶起来。



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

__________________________________

用FB真好,有BF更好;
大家好才是真的好,好的真好.
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女
poor-man   帅哥
侠客




UID:298982
注册:2005-8-4
最后登录: 2008-05-06
帖子:15
精华:0

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

状态:...离线...

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


顶部
10楼 发表于 2008-5-4 11:30 
这个样子行不?自己测试一下

void catbit(unsigned char *data,int *array,int n_array,int n_bits)
{
     int start= 0;
     int point = 0;
     int tmp = 0;
     int c  = 0,i=0;
     char lost =0 ;
     char c_tmp = 0;
     char *p,*p1;
     int len = (int)n_bits/8;
         int len1 = 0;

      c = n_bits%8;
      if( c > 0 )
             len++;
      p = data;
      for(i=0; i< n_array; i++)
      {
                 tmp = array;
                 tmp <<= 32-(n_bits+start);
                 p1 = (char *)&tmp;
                 if(c != 0)
                 {
                         c_tmp = 0xff;
                        c_tmp >>= start;
                        *p1 = (*p1) & c_tmp;     //clear
                        *p1 = *p1 & lost;        // load lost to frist Byte
                        start += (8-c);       
                        if( start >= 8 )
                                len1 = len + 1;
                        else
                                len1 = len;
                        start = start%8;                                             
                }
                 memcpy(p, &tmp, len1);
                 p1 += len1;
                 lost = *p1;
                 p += len1;
    }
}



您对本贴的看法:鲜花[0] 臭蛋[0]
IBM 集群技术资源全面接触 |赠送linux之父推荐的经典书 | CU-2008奥运之春摄影赛 | 新版开张:《IT爱车族》分享香车美女

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


 


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

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

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

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