You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中实现10、1、A、B这类十六进制数的排序

问题解答

核心认知澄清

你的基础认知没有错误:十六进制中单个字符A对应十进制数值10,B对应十进制数值11。你疑惑的核心原因是忽略了多字符十六进制数的位权规则:

十六进制每一位的位权是16的n次幂(n从右往左从0开始计数),因此双字符的10作为十六进制数,对应的十进制计算规则为:1 * 16^1 + 0 * 16^0 = 16。

数值大小对比结果:1(十进制1) < A(十进制10) < B(十进制11) < 10(十进制16),正好符合你给出的期望排序结果。

C语言实现思路

你可以按以下步骤实现排序:

  • 第一步:将输入的所有十六进制字符串统一转换为十进制整数,可以直接调用C标准库的strtol函数,指定base参数为16即可完成转换,不需要自行实现解析逻辑
  • 第二步:对转换后的十进制整数数组做升序排序,冒泡、快速排序等常规排序算法都可使用
  • 第三步:将排序后的整数重新转换为十六进制字符串输出即可

参考代码片段

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// qsort专用比较函数
int cmp(const void *a, const void *b) {
    return *(long *)a - *(long *)b;
}

int main() {
    char *input[] = {"10", "1", "A", "B"};
    int len = sizeof(input)/sizeof(input[0]);
    long nums[len];

    // 十六进制字符串转十进制整数
    for(int i=0; i<len; i++) {
        nums[i] = strtol(input[i], NULL, 16);
    }

    // 调用标准库快速排序
    qsort(nums, len, sizeof(long), cmp);

    // 转大写十六进制输出
    for(int i=0; i<len; i++) {
        printf("%lX ", nums[i]);
    }
    return 0;
}

运行上述代码输出结果为1 A B 10,符合需求。

内容的提问来源于stack exchange,提问作者AKHIL SHARMA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:51:00