C++将16进制补码转换为十进制数

好多年没更新了,工作后的第一个更新。

言归正传,前几天碰上一个小问题,简单地说就是将核对给机械臂的发的运动指令是否正确,但指令码是16进制补码,看得云里雾里,用自带的计算器发现,并没有将负数的补码转成10进制的指令,因此,就写了一个简单的转换程序,代码如下:

// 计算一个16进制补码表示的整数对应的十进制数
#include <tchar.h>  
#include <cmath>
#include <iostream>

#define MAXCHAR  9
#define MAXDIGIT 8

using namespace std;

int HexChar2Digit(char NumInComplement[], int NumDigit[], int charsize);

// 主函数
int _tmain(int argc, _TCHAR* argv[])
{
	int bitnum = 0, charsize = 16;
	int isNegNum = 0;
	int i, numbase;
	long long resultInDec = 0;
	char NumInComplement[MAXCHAR];
	int NumDigit[MAXDIGIT];

	cout << "输入计算的位数(8位,16位,32位):" << endl;
	cin >> bitnum;

	charsize = bitnum / 4;

	// 清空缓存区
	cin.clear();
	cin.ignore(numeric_limits<std::streamsize>::max(), '\n');

	cout << "输入16进制表示的补码(输入 'q'
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的16计算器的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAX_LEN 100 int hex_to_dec(char c) { if (isdigit(c)) { return c - '0'; } else if (c >= 'a' && c <= 'f') { return c - 'a' + 10; } else if (c >= 'A' && c <= 'F') { return c - 'A' + 10; } else { return -1; // error } } char dec_to_hex(int n) { if (n >= 0 && n <= 9) { return n + '0'; } else if (n >= 10 && n <= 15) { return n - 10 + 'a'; } else { return '?'; // error } } char* add_hex(char* a, char* b) { int len_a = strlen(a), len_b = strlen(b), len_c = 0; char* c = (char*) malloc(sizeof(char) * (MAX_LEN + 1)); int carry = 0; while (len_a > 0 || len_b > 0 || carry > 0) { int x = (len_a > 0) ? hex_to_dec(a[--len_a]) : 0; int y = (len_b > 0) ? hex_to_dec(b[--len_b]) : 0; int z = x + y + carry; carry = z / 16; c[len_c++] = dec_to_hex(z % 16); } c[len_c] = '\0'; // reverse the result for (int i = 0, j = len_c - 1; i < j; i++, j--) { char temp = c[i]; c[i] = c[j]; c[j] = temp; } return c; } int main() { char a[MAX_LEN + 1], b[MAX_LEN + 1]; printf("Enter two hexadecimal numbers:\n"); scanf("%s %s", a, b); char* c = add_hex(a, b); printf("The sum is: %s\n", c); free(c); return 0; } ``` 这个程序实现了两个16数相加,并输出结果。在此程序中,我们用 `hex_to_dec` 函数将16转换为10数,用 `dec_to_hex` 函数将10转换为16数。`add_hex` 函数实现了16数的加法。输入的两个16数必须以字符串形式输入,并且长度不能超过 `MAX_LEN`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值