c 十进制数转十六进制

2023-11-18

有3种方式实现,其中两种是使用系统函数,另一种是直接自己编写。

使用系统函数实现要加入#include <stdlib.h>,自己编写则不需要这个头文件。

下面的代码就是3种方式的实现,包括2位的整数和任意整数(2的31次方以内)都可以。可自己选择需要的实现方式。

利用系统函数有

  1. char * itoa ( int value, char * str, int base );value是要转化的数字,str是转化后的字符串存储的位置,base是进制数(但是这个函数不是标准C函数,有些编译器是不支持的!)。所以代码可以为:

char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度

char * inttohex(int aa)
{
    itoa (aa, buffer, 16);
    return (buffer);
}
  1. sprintf(str,"%x",value);str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。所以代码可以为:

char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度

char * inttohex(int aa)
{
    sprintf(buffer, "%x", aa);
    return (buffer);
}
  1. 自己编写

如果参数只要两位数的整数,那么很简单。代码如下:

char buffer [3]; //用于存放转换好的十六进制字符串。由于只要支持2位整数,所以长度3即可

char * inttohex(int aa)
{
    if (aa / 16 < 10)   //计算十位,并转换成字符 
        buffer[0] = aa / 16 + '0';
    else
        buffer[0] = aa / 16 - 10 + 'A';
    if (aa % 16 < 10)   //计算个位,并转换成字符
        buffer[1] = aa % 16 + '0';
    else
        buffer[1] = aa % 16 - 10 + 'A';
    buffer[2] = '\0';   //字符串结束标志
    return (buffer);
}

如果参数是任意整数,由于计算方法是每次都除以16和对16取余数,余数以倒序的顺序排列就是结果,所以最佳方法是用递归函数(当然循环也可以,但需要最后再进行倒序)。递归代码如下:

char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度

char * inttohex(int aa)
{
    static int i = 0;
    if (aa < 16)            //递归结束条件 
    {
        if (aa < 10)        //当前数转换成字符放入字符串 
            buffer[i] = aa + '0';
        else
            buffer[i] = aa - 10 + 'A';
        buffer[i+1] = '\0'; //字符串结束标志 
    }
    else
    {
        inttohex(aa / 16);  //递归调用 
        i++;                //字符串索引+1 
        aa %= 16;           //计算当前值
        if (aa < 10)        //当前数转换成字符放入字符串 
            buffer[i] = aa + '0';
        else
            buffer[i] = aa - 10 + 'A';
    }
    return (buffer);
}

最后测试代码如下(以sprintf为例,其余只要替换inttohex函数中的代码内容即可):

#include <stdio.h>
#include <stdlib.h>
 
char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度
 
char * inttohex(int aa)
{
    sprintf(buffer, "%x", aa);
    return (buffer);
}
 
int main ()
{
  int num;
  char * hex_str;
  printf ("Enter a number: ");
  scanf ("%d",&num);
  hex_str = inttohex (num);
  printf ("Hexadecimal number: %sH\n", hex_str);
  return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c 十进制数转十六进制 的相关文章

  • 如何在基于 MFC 对话框的应用程序中捕获复选框的 MouseMove 事件?

    我的应用程序是一个基于 VC6 MFC 对话框的应用程序 具有多个属性页 我必须捕获控件上的鼠标移动事件 例如复选框 如何捕获 MFC 中复选框上的 mousemove 事件 复选框是一个按钮控件 例如 CWnd 从 CCheckBox 派
  • MFC和ATL之间的根本区别是什么?

    假设我是only将它们用于 普通 GUI 程序 没有 COM 没有 ActiveX 没什么花哨的 我将看到 ATL 和 MFC 之间的根本区别是什么 以帮助我弄清楚使用哪一个 我在网上做了一些搜索 但最终没有一个答案真正回答了我的问题 ht
  • 如何在禁用组框时禁用组框文本?

    我面临组框文本的问题 我通过调用 EnableWindow FALSE 禁用了组框 问题是组框标题没有变灰 谁能告诉我为什么会发生这种情况以及如何摆脱这个问题 这似乎是 comctrl32 dll 中的一个错误视觉风格 https lear
  • Mfc CComboBoxEx - 如何更改背景颜色

    我有一个派生自 CComboBoxEx 的类 我正在尝试更改背景颜色 我认为它会像 ComboBox 一样工作 使用 SetBkColor 函数 但它不会改变背景颜色 这是我尝试过的 BEGIN MESSAGE MAP CMyComboBo
  • 同时显示同一文档的多个视图

    如何说服 MFC 文档 视图体系结构让我同时显示同一文档的两个不同视图 例如 说我的CDocument子类代表某种描述的档案 我想要一个用户界面 其中该存档中的所有条目的名称都显示在CListView子类显示在左侧窗格中 而当前所选条目的详
  • VC++中如何判断链接是否存在?

    我有一个链接 我已通过正则表达式检查该链接是否是有效的 URL 现在 我想检查该链接是否是有效的 http 链接 即它不应该是不存在的链接 VC 6 0 MFC 有办法检查吗 一种选择是尝试使用以下方法从该 URL 获取数据URLOpenB
  • 菜单被裁剪

    我有一个MFC项目 它支持 40 多种语言 我的电脑上有两个显示器 它们都是不同尺寸的显示器和不同的分辨率 如果我将应用程序移至较小的显示器上 则不会显示完整的语言菜单 我知道它会显示滚动条 为什么不是呢 我的菜单是标准菜单 没有什么花哨
  • 托管和非托管 C++/MFC 可以混合在一个 dll 中吗?

    以前 我们有 MFC VC6 VB6 和 C 应用程序中的软件 需要调用用 C 和 MFC 编写的相同引擎 该引擎需要 C 来提高速度 当时我们决定使用 COM 作为接口 因为所有三个都可以使用它 并且在编组等方面的问题最少 我们的 MFC
  • 如何将 unicode 字符变成小写字母

    我在 VC MFC 中将 unicode 字符转换为小写字母时遇到问题 我在 CString 变量中有 unicode 字符 所以 使用英语 MakeLower 工作正常 我得到小写字母 但它无法将 unicode 字符转换为小写 我确实尝
  • 升级后的 MFC 应用程序看起来仍然很旧

    我有一个用 VC6 编写的 MFC 应用程序 我已将其升级到 VS2015 并且它可以构建并运行 该应用程序是一个主可执行文件 其中包含许多包含对话框的 DLL 然而应用仍然looks就像用 VC6 构建的一样 所有 GUI 组件都没有 W
  • MFC 控件上的文本 - Unicode 字符(例如日语)被截断

    背景 我正在开发一个 C MFC 应用程序 我们已经将其转换为显示 unicode 字符以支持外语 在大多数情况下 这是成功的并且 unicode 字符显示正确 但我遇到了一个问题 某些控件上的某些文本被截断 Example 在这里 您可以
  • 如何在现有 Windows 应用程序中获得 ATL 支持

    我正在 Visual Studio 2012 中使用 Qt 5 3 1 构建一个应用程序 我还想使用一个硬件库 这需要我向项目添加一个简单的 ATL 对象 这可以通过使用 Visual Studio 向导来完成 该向导抱怨我的项目既不是 M
  • 如何找到激活时打开给定 HMENU 的菜单项(如果有)?

    我想用原型实现一个功能 Locates the menu item of the application which caused the given menu mnu to show up return true if the given
  • 如何停止对辅助隐式加载 DLL 的 DLL 劫持

    例如 COMDLG32 DLL 隐式链接到以下系统 DLL 以及其他 xmllite dll dll srvcli dll wkscli dll 链接信息库 netutils dll 微星 dll 由于这些是由操作系统隐式加载的 而不是使用
  • 在Linux上运行MFC程序

    我有一个相当大的基于 MFC 的程序 我的任务是让它在 Linux 上运行 我已经解释过 这需要将程序重新编写为带有 STL 的直接 C 更多工作 或者重新编写为 Qt C 更少工作 现在我被告知 我需要编写包装器以使每个 MFC 类在 L
  • 如何将基数词转换为序数词

    有没有一种简单的方法可以将数字 1 2 3 转换为 1st 2nd 3rd 并且以这种方式我可以为该函数提供一种语言并具有它会返回我目标语言的正确形式吗 标准 C stl 或 boost 都可以 MFC 或 ATL win32 api 或我
  • 您可以将 CMFCVisualManager 与基于对话框的应用程序一起使用吗?

    您可以将 CMFCVisualManager 与基于对话框的应用程序一起使用来更改应用程序的外观吗 如果是这样 它是如何完成的 这个想法是使用随 MSVC 2008 发布的 MFC 功能包来更改控件 例如按钮 的形状 颜色等 不 不能这样做
  • .NET(或 MFC)的高速图形控件?

    我需要编写一个数字示波器类型的应用程序 有很多很棒的静态绘图控件 但我需要一些可以绘制每秒处理 4000 个样本的 16 条轨迹的东西 有人知道 NET 的高速图形控件吗 我什至会选择 MFC 因为它可以封装到 NET 控件中 谢谢您的帮助
  • 错误 C2248: 'CObject::CObject' : 无法访问类 'CObject' afxwin.h 中声明的私有成员

    我试图让班级负责在灰色背景上放置一些文本 Score h pragma once class Score public Score Score void UpdateScore int points void UpdateLives int
  • 如何在 MFC 中创建带圆角的进度控件?

    我需要在 MFC 应用程序中创建一个带圆角的进度条 我尝试过使用 CreateRoundRectRgn 和 SetWindowRgn 的组合 它具有使控件完全消失的效果 我还尝试使用透明的 GIF 覆盖层 该覆盖层将绘制在进度栏的顶部 但我

随机推荐

  • AutoEncoder (自编码/非监督学习)

    神经网络也能进行非监督学习 只需要训练数据 不需要标签数据 自编码就是这样一种形式 自编码能自动分类数据 而且也能嵌套在半监督学习的上面 用少量的有标签样本和大量的无标签样本学习 这次我们还用 MNIST 手写数字数据来压缩再解压图片 然后
  • Boost升压电路调试

    背景 项目用到了一款升压电路 将12V升压到32V 电流要求有12A 最大18A 设计的方案是使用Boost Controller 外置MOS来实现 选定的Controller芯片为Maxim的MAX25203 问题 回板后进行调试 在不使
  • 硕士毕业论文应该如何梳理论文框架?

    硕士毕业论文相比于本科论文来说 具有更为广阔的知识面 对于研究的课题也更有深度 如果硕士毕业论文能取得一个很高的成绩 那么不管之后是继续求学还是找工作 都会有一定的优势 我曾经就硕士论文这方面和我的一个同学讨论过 当时我询问他是怎么取得69
  • React+React-Redux+Webpack+Express+MongoDB完整项目利用PM2+github部署到服务器

    React项目使用pm2部署上线 简述 项目概述 项目文件和代码结构 登录到服务器 输入指令 安装和配置nginx 安装MongoDB 打通三端 客户端 github 服务器 本地到github 服务器到github 本地到服务器 pm2部
  • 正大讲解什么叫国际期货?需要多少本金?

    国际期货是指交易所建立在中国大陆以外的期货交易 以美国 英国 新加坡等交易所内的产品为常见交易期货合约 有些期货合约品种会对国内期货价格变动产生影响 所以国内投资者可以参考国际期货行情进行期货交易 开户没有资金限制 但交易期货要交纳手续费和
  • 32 位的有符号整数的取值范围以及数值溢出

    short int long 是C语言中常用的三种整数类型 分别称为短整型 整型 长整型 在现代操作系统中 short int long 的长度分别是 2 4 4 或者 8 它们只能存储有限的数值 当数值过大或者过小时 超出的部分会被直接截
  • 关于在VM虚拟机下,安装OpenWrt软路由,所遇错误及解决方法。

    首先是去阿里的openwrt源下载的镜像为img格式 vm虚拟无法识别 需要转换为iso格式或者vmdk格式 用软碟通转换iso格式失败 于是准备转换成vmdk格式 网上大部分采用starwindconverter软件 但是最新的版本老是报
  • 数字水印

    数字水印 Digital Watermarking 1 技术是将一些标识信息 即数字水印 直接嵌入数字载体当中 包括多媒体 文档 软件等 或是间接表示 修改特定区域的结构 且不影响原载体的使用价值 也不容易被探知和再次修改 但可以被生产方识
  • Golang笔记:使用http包实现基础WebServer功能

    文章目录 目的 监听请求并响应 请求解析 进行响应 静态文件服务 总结 目的 WebServer是一种非常常用的功能 Golang的高并发特性在处理此类工作中也有较大的优势 同时借助标准库中的 net http 包可以非常快速的编写WebS
  • mysql Specified key was too long; max key length is 767 bytes

    MySQL默认的索引最大长度是767字节 在5 5版本开始后可以通过设置innodb large prefix on来增大索引长度 可达到3072字节 但是只有row format DYNAMIC COMPRESSED的情况下索引的长度才能
  • 系统学Python(一)整数、浮点数、布尔值及类型转换

    整数 int类型数据是整数 正整数或负整数 没有小数 不限制长度 举例1 x 2 print x print type x 用tpye 函数可以查看变量类型 举例2 y 3 print y print type y 自动化QQ交流群 704
  • 常用的几款性能测试软件

    JMeter Apache JMeter是一款免费 开源的性能测试工具 广泛应用于Web应用程序和服务的性能测试 它支持模拟多种不同类型的负载 可以测试应用程序在不同压力下的性能表现 并提供丰富的图表和报告来分析测试结果 优点 免费且开源
  • youtube-dl 中文版帮助文档目录

    选项 常规选项 h help打印此帮助文本并退出 version打印程序版本并退出 U update将此程序更新为最新版本 使 确保您具有足够的权限 如果需要 使用sudo运行 i ignore errors继续出现下载错误 例如 跳过播放
  • JQueryUI如何读取本地文件

    1 设计html界面 这用了两个按钮主要是因为file类型的按钮太丑了 后面跟一个输入框 这里把它隐藏 用下面的按钮激活文件选择对话框
  • Adroid游戏开发实例讲解(四)-电子白板附源码

    Adroid游戏开发实例讲解 四 电子白板附源码 程序之美 电子白板 在很多Android设备中经常会用到 比如说Android电视 触摸屏用上手写笔 轻松在上面写字 比如视频教学Android设备 有很多培训教学机构 都放有Android
  • phpstudy php调试,phpStudy vscode 搭建debug调试的教程详解

    下载地址 Xdebug zend extension D phpstudy pro Extensions php php7 3 4nts ext php xdebug dll xdebug collect params 1 xdebug c
  • 论文:ViT(Transformer 图像分类)

    论文 https arxiv org abs 2010 11929 pytorch代码 https github com lucidrains vit pytorch 不了解Transformer的 建议先看这篇 https blog cs
  • Fiddler实现android手机抓包

    目录 一 fiddler的简介 二 安装fiddler 三 fiddler设置 1 设置HTTPS 2 设置允许远程连接 3 重启fillder 使得配置生效 4 查看端口监听 四 android端设置 1 首先查看电脑的 IP 地址 确保
  • AntDB数据库亮相2023操作系统产业大会,携手合作伙伴共建网信生态

    7月5日 以 麒麟遨天 聚创未来 为题的2023操作系统产业大会在中关村国家自主创新示范区展示交易中心顺利召开 亚信科技作为麒麟软件亲密的合作伙伴受邀参会 AntDB数据库生态负责人在会上进行了 与您携手 共建网信生态 的精彩演讲 与政 产
  • c 十进制数转十六进制

    有3种方式实现 其中两种是使用系统函数 另一种是直接自己编写 使用系统函数实现要加入 include