“C语言里怎样提取一个十六进制数的最高位”具体解决方案如下:
解决方案1:
你是不是想这样/对于0x30,3是最高位,0是最低位如果是的话那就这样办:首先不同类型处理方法不同,int型是2字节,伱可以这样最高为提
取,int a=b&0xf09(b为提取对象),最地位int
a=b&0x0f(b为提取对象),long型是4字节伱可以这样,long a=b&0xf000,long
a=b&0x000f;还有什么再问
那稍加修改:int a=b&1000000000000000b,int
a=b&0000000000000001b,long
a=b&10000000000000000000000000000000b,int
a=b&00000000000000000000000000000001b;这是2进制数的位 *** 作,虽然看起来麻烦,但是效率最高,其他还有
方法,但是在单片机中不推荐
如果你学过汇
编这点很好理解,没学过也没事,我现在说给你听,这里提取取位用到的是c语言种的为 *** 作,&(与 *** 作)的定义是:1&1=1,1&
amp;0=0,0&1=0,0&0=0,|(或 *** 作)的定义是:1|1=1,1|0=1,0|1=1,0|0=0,所以要提取二进制中
的某一位,思想是保留那一位,其余为全为0,这样就& *** 作符就可以轻松做到,比如0011&0001=0001,提取最低位,0011&
amp;1000=1000,提取最高位,还有就是在c语言里int型是2字节,long型是4字节
解决方案2:
楼主的意思应该a=0x30;b=a>>7;得到的b是0x30的最高位
首先对于一个整数,无论是十进制还是十六进制,它的值是一定的。
所以,转换16进制和10进制原理是一样的,先求出转换后的值,然后再以十六进制的形式输出就行了。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
你不会是直接从网页里面复制就粘贴到编辑器里面吧?
那样不行的,你自己重新输入一下。或者先拷贝到文本文档里面,再从文本文档里面复制。从网页里面直接复制有特殊字符的。
还有,程序函数不能在主函数里面定义的。
#include <stdioh>
int convert(char str);
void main()
{
char str[20];
int result;
scanf("%s",str); //自己输入一个十六进制的串
result = convert(str);
printf("%0x",result);
}
int convert(char str)
{
int i,sum = 0;
for(i = 0;str[i] != '\0';i++)
{
if(str[i]>='0' && str[i]<='9')
sum += sum16 + str[i]-'0';
else if(str[i]<='f' && str[i]>='a')
sum += sum16 + str[i]-'a'+1;
else if(str[i]<='F' && str[i]>='A')
sum += sum16 + str[i]-'A'+1;
}
return sum;
}
#include <stdioh>
#include <mathh>
void main()
{
int a=98765;//需要转换的数字
int yiwei=0xF;//用以移位的数字
int numbers=0;//记录移位多次
int tmp=0,index=0;
char buffer[11]={'0'};//
buffer[1]='x';//buffer[2]='0';
buffer[10]='\0';//给最后一个补充\0
do//移位到最后高位都是1,因此最后会是一个负数
{
tmp=a&yiwei; //取出四位当做十六进制的一位
tmp>>=numbers4;//要还原取出来的这个数字,如果不是在低位取得就需要这样 *** 作
if(tmp>=10&&tmp<16)
buffer[10-1-index]=tmp-10+'a';//因为从最低位取的,因此赋值从数组最后面开始赋
else if(tmp<10&&tmp>=0)
buffer[10-1-index]='0'+tmp;
if(yiwei<<4<0)//这里判断是不是已经到了最高位了,如果是最高位,最高的前三位是数字,最后一位是符号
yiwei=yiwei<<3;
else
yiwei<<=4;//把这个数字向后移四位,用以取下一个四位
index++;
numbers++;
}while(yiwei>0);
printf("%s\n",buffer);
}
#include<stdioh>
#include<stdlibh>
#include<stringh>
int main(int argc, char argv[])
{
char aa[] = "0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111";
char bb[20];
char cTmp[5];
int tmp = 0;
char p = NULL;
memset(bb, 0x00, sizeof(bb));
memset(cTmp, 0x00, sizeof(cTmp));
p = aa;
sscanf(p, "%[0,1]", cTmp);
while(NULL != (p = strstr(p, cTmp)))
{
sprintf(bb, "%s%X", bb, strtoul(cTmp,0,2));
p = p + strlen(cTmp) + 1;
sscanf(p, "%[0,1]", cTmp);
}
printf("%s", bb);
}
大概就是这么一个思路,主要用到的就是strtoul函数。
你改成fscanf估计就好使。
以上就是关于C语言里怎样提取一个十六进制数的最高位全部的内容,包括:C语言里怎样提取一个十六进制数的最高位、给一个C语言字符串转16进制数的函数、C语言二进制如何转换成十六进制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)