C语言里怎样提取一个十六进制数的最高位

C语言里怎样提取一个十六进制数的最高位,第1张

“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语言二进制如何转换成十六进制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9756617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存