1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #include <stdio.h>
- #include <ctype.h>
- int main() {
- char input[1000]; // 假设输入的字符串长度不超过1000
- char hex_str[1000]; // 存储提取出的十六进制字符
- int index = 0; // 记录当前处理的字符位置
- int negative = 0; // 标记是否存在负号
- // 读取输入直到遇到 #
- while (1) {
- char ch = getchar();
- if (ch == '#') {
- break;
- }
- input[index++] = ch;
- }
- input[index] = '\0'; // 在输入末尾加上字符串结束符
- // 判断是否有负号
- if (input[0] == '-') {
- negative = 1; // 存在负号
- index = 1; // 从下一个字符开始处理
- } else {
- index = 0; // 没有负号,从第一个字符开始处理
- }
- int hex_index = 0; // 记录当前提取的十六进制字符位置
- // 遍历输入字符串,提取十六进制字符
- while (input[index] != '\0') {
- char ch = toupper(input[index]); // 将字符转换为大写以便统一处理
- if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F')) {
- hex_str[hex_index++] = ch; // 是十六进制字符,加入到hex_str中
- }
- index++;
- }
- hex_str[hex_index] = '\0'; // 在提取的十六进制字符末尾加上字符串结束符
- // 使用sscanf将十六进制字符串转换为长整型
- long decimal_value;
- sscanf(hex_str, "%lx", &decimal_value); // %lx格式将十六进制字符串转换为长整型
- // 如果存在负号,转换后的数值取负
- if (negative) {
- decimal_value = -decimal_value;
- }
- // 输出转换后的十进制数值
- printf("%ld\n", decimal_value);
- return 0;
- }
|