【发布时间】:2016-11-19 21:05:52
【问题描述】:
我需要编写一个程序来解析十六进制之间的运算,我在这里询问要运算的十六进制数,询问它们,然后显示结果。
可以进行的运算有or,and,xor(|,^,&)。我用存储十六进制数的数组制作了转换部分,然后将它们转换为二进制并将其保存在另一个数组中,但是当我意识到我不知道要操作多少个十六进制整数时,我不知道如何创建足够的数组来存储那些有人告诉我我必须使用指针。我对此很陌生,并且对此进行了一些研究,但仍然不知道指针如何解决...
到目前为止我的部分代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <proyecto.h>
#include <string.h>
int main () {
char op,bin1[31]="",bin2[31]="",hex1[100],hex2[100];
int sizeh,repeat1,repeat2,n,z,i;
printf("Write Hexadecimal:);
scanf("%s",hex1);
convert(hex1,bin1,n);
函数转换:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <proyecto.h>
#include <string.h>
void convert(char hex1[],char bin1[],int n){
int i,b;
printf("\nEquivalent binary value: ");
for(i=0;i<4;i++){
switch(hex1[i]){
case '0': strcat(bin,"0000"); break;
case '1': strcat(bin,"0001"); break;
case '2': strcat(bin,"0010"); break;
case '3': strcat(bin,"0011"); break;
case '4': strcat(bin,"0100"); break;
case '5': strcat(bin,"0101"); break;
case '6': strcat(bin,"0110"); break;
case '7': strcat(bin,"0111"); break;
case '8': strcat(bin,"1000"); break;
case '9': strcat(bin,"1001"); break;
case 'A': strcat(bin,"1010"); break;
case 'B': strcat(bin,"1011"); break;
case 'C': strcat(bin,"1100"); break;
case 'D': strcat(bin,"1101"); break;
case 'E': strcat(bin,"1110"); break;
case 'F': strcat(bin,"1111"); break;
case 'a': strcat(bin,"1010"); break;
case 'b': strcat(bin,"1011"); break;
case 'c': strcat(bin,"1100"); break;
case 'd': strcat(bin,"1101"); break;
case 'e': strcat(bin,"1110"); break;
case 'f': strcat(bin,"1111"); break;
default: printf("\nInvalid hexadecimal digit %c ",hex[i]);
}
}
printf("%s",bin);
}
【问题讨论】:
-
所以你想读取任意数量的十六进制字符串并将它们转换为二进制字符串,好的,但是运算符是什么?能给我举个例子吗?还是您的问题是处理任意数量的十六进制字符串?
-
建议使用
strtol将读取的字符串转换为整数值(它将处理hex 与base等于16),然后输出二进制表示。否则,您将遇到 endian 和错误转换问题,如上所示尝试转换。
标签: c arrays pointers binary hex