c语言找到一个十六进制数的某一位并替换 20

比如一个十六进制数0x1234abdf,我要替换其中的某一位,该怎么做... 比如一个十六进制数0x1234abdf,我要替换其中的某一位,该怎么做 展开
 我来答
伊·梵beec
2013-03-29 · TA获得超过2161个赞
知道大有可为答主
回答量:1897
采纳率:0%
帮助的人:1384万
展开全部

#include<stdio.h>

unsigned int SetBit(unsigned int *num, int pos, int value);

void main()

{

  unsigned int a = 0x1234abcd;

  printf("a=0x%08x\n",a);

  printf("a(0,0)=0x%08x\n",SetBit(&a,0,0));

  printf("a(0,1)=0x%08x\n",SetBit(&a,0,1));

  printf("a(31,1)=0x%08x\n",SetBit(&a,31,1));

  printf("a(31,0)=0x%08x\n",SetBit(&a,31,0));

  printf("a(28,0)=0x%08x\n",SetBit(&a,28,0));

  printf("a(28,1)=0x%08x\n",SetBit(&a,28,1));

}

/*

   将num第pos位设置为value

   pos取值范围0-31

   value取值范围0,1

*/

unsigned int SetBit(unsigned int *num, int pos, int value)

{

  *num &= ~(1<<pos); //将*num的第pos位设置为0

  *num |= value<<pos;

  return *num;

}


ismartbug
2013-03-29 · TA获得超过740个赞
知道小有建树答主
回答量:152
采纳率:100%
帮助的人:137万
展开全部
十六进制替换,可以先 “与” 运算,然后“加”运算 完成。
//和0xFFFFFFFF与运算替换其中的第2个数,就把第二个F换成0

a=0x1234abdf & 0xF0FFFFFF // 此时a=0x1034abdf

a=a+0x04000000//此时 a=0x1434abdf 2就变成4了

希望能帮到你
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
徐霄沛
2013-03-29 · 超过24用户采纳过TA的回答
知道答主
回答量:315
采纳率:100%
帮助的人:122万
展开全部
int func(int *num,int bit,char value)
{
if( bit <0 || bit >sizeof(int)*2 )
return -1;
if( value <0 || value > 15 )
return -2;
char tmp=0x0f;
char tmp_high=0xf0;
unsigned char * pos=(unsigned char*)value;
pos += (bit / 2);

if( bit %2 != 0)
{
value >>= 4;
value &= tmp_high; //去掉低位
*pos &= tmp; //去掉高位
*pos |= value;
}
else
{
value &= tmp; //去掉高位
*pos &= tmp_high; //去掉低位
*pos |= value;
}
return 0; //成功。
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
扬珈蓝平4c
2013-03-29 · 超过23用户采纳过TA的回答
知道答主
回答量:75
采纳率:100%
帮助的人:41万
展开全部
问题能详细点吗?输入16进制的数,然后替代的数是16进制的?输入16进制?。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式