在C语言中反转十六进制数的程序
我的做法: 第一步。首先我把十六进制数转换成十进制数。(十六进制到十进制逻辑) 然后我使用~operator和unsigned char数据类型变量反转十进制数的位 第二步。然后我把十进制数转换成十六进制数。(十进制到十六进制逻辑) 所以我得到了倒十六进制数 输入和输出是十六进制数的字符串在C语言中反转十六进制数的程序,c,hex,decimal,C,Hex,Decimal,我的做法: 第一步。首先我把十六进制数转换成十进制数。(十六进制到十进制逻辑) 然后我使用~operator和unsigned char数据类型变量反转十进制数的位 第二步。然后我把十进制数转换成十六进制数。(十进制到十六进制逻辑) 所以我得到了倒十六进制数 输入和输出是十六进制数的字符串 #包括 #包括 #包括 int 主要() { 长十进制,qu,rem; int k,j=0; 六碳[100]; int p=0; 内部挖掘,温度; 无符号字符re=0; 字符十六进制[32]=“42”;//输
#包括
#包括
#包括
int
主要()
{
长十进制,qu,rem;
int k,j=0;
六碳[100];
int p=0;
内部挖掘,温度;
无符号字符re=0;
字符十六进制[32]=“42”;//输入
int len=strlen(十六进制);
蓝--;
对于(int i=len;i>=0;i--)
{
开关(十六进制[i])
{
案例“A”:
dig=10;
打破
案例“B”:
dig=11;
打破
案例“C”:
dig=12;
打破
案例“D”:
dig=13;
打破
案例“E”:
dig=14;
打破
案例“F”:
dig=15;
打破
违约:
dig=十六进制[i]-48;
打破
}
温度=温度+挖掘*功率(16,p);
p++;
re=温度;
re=~re;
}
qu=re;
while(qu!=0)
{
rem=qu%16;
如果(rem<10)
hexa[j++]=48+rem;
其他的
hexa[j++]=55+rem;
qu=qu/16;
}
对于(k=j;k>=0;k--)
{
printf(“%c”,十六进制[k]);
}
返回0;
}
#包括
#包括
int main(){
printf(“请输入一些十六进制:”);
无符号整数十六进制;
//将输入扫描为十六进制到整数
扫描频率(“%x”和十六进制);
//将最后一个字节截断为字符
无符号字符c=十六进制;
//倒过来
c=~c;
//以大写十六进制打印出来
printf(“倒十六进制:%02X\n”,c);
返回0;
}
这也许足够了。这对于执行与您描述的相同的步骤非常重要,但代码更少
#include <stdio.h>
#include <string.h>
int main()
{
char * hex = "42ABE3";
unsigned dec;
for(int i = 0; i < strlen(hex); i++) {
sscanf(hex + i, "%1X", &dec);
printf("%X", 15 - dec);
}
}
请注意,此代码没有检查sscanf是否成功,但如果需要,您可以添加它。我们讨论的长度是多少?我是说六边形的弦。它是未知的字节长,必须逐字节倒排,还是像8位一样是固定长度?长度是8位您的问题是什么?例如,如果输入是42,其二进制是0100 0010。所以输出应该是1011101=BD@stark这个问题是由同一个用户提出的,但我很抱歉地说,即使在看到这些评论之后,我也不明白背后的逻辑。因此,请您简单地解释一下逻辑。
scanf
将十六进制输入读取到hex
变量中,然后hex
的最后一个字节写入c
变量中,c
变量通过~/code>运算符反转,然后通过printf
将c
打印为十六进制。谢谢您的回答。但是我想要的是,预先定义十六进制的值。并且不想从用户那里扫描它。我正在学习嵌入式系统的编码。例如,无符号整数十六进制=42//42例如,那么您可以去掉scanf并将十六进制设置为0x42。int实际上不需要无符号,但字符必须无符号,否则对于大于0x80的值,它将环绕并显示为负数,这是错误的。感谢您的回答。但我想要的是,预先定义我的输入。并且不想从用户那里扫描它。我正在学习嵌入式系统的编码。@Rohit它没有从用户那里扫描sscanf
从字符串扫描。您能解释sscanf行吗?与简单的scanf
相同,但扫描字符串hex
。使用hex+i
时,字符串的开头将是从0开始的i
第个字符索引。因此,如果i=2
,那么它将从示例中的A
进行扫描<代码>“%1X”
将以一个十六进制数字读取为十进制。
#include <stdlib.h>
#include <stdio.h>
int main() {
printf("Please enter some hex: ");
unsigned int hex;
// scan input as hex into an integer
scanf("%x", &hex);
// truncate the last byte into a char
unsigned char c = hex;
// invert it
c = ~c;
// print it back out as uppercase hex
printf("Inverted hex: %02X\n", c);
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char * hex = "42ABE3";
unsigned dec;
for(int i = 0; i < strlen(hex); i++) {
sscanf(hex + i, "%1X", &dec);
printf("%X", 15 - dec);
}
}
BD541C