C语言itoa函数实现-数字面值转字符串

2023-10-27

数字面值转字符串

思路:首先判断是否为负数若是则转为正数,将待转换的int类型值每次对10取余获得最低位的数字,将该数字转为字符面值,然后将int类型值除以10,直到等于0结束循环,此时由于是从int类型值的最低位开始取得,所以转换出来的字符串是反着的,将其逆序即可。


对于32位CPU处理器,int类型的最高位是符号位,为0是正数,为1则是负数。

例如:

  • 正数1,十六进制为:0x00000001,第31位为0,所以是正数。
  • 负数-1,十六进制为:0xFFFFFFFF,第31位为1,所以是负数。

也就是说,正数 = 负数按位取反 + 1,例如:1 = ~(-1) + 1。


代码实现:

char* my_itoa(int value)
{
	int i = 0, k = 0, size = 0;;
	static char string[16];
	char* p = string;

	/* 负数转正数并添加负号 */
	if(value >> 31)
	{
		value = ((~value) + 1);
		*p++ = '-';
	}

	/* 数字转面值字符 */
	do
	{
		p[size++] = value % 10 + '0';
		value /= 10;
	}while(value > 0);

	/* 添加结束符 */
	p[size] = 0;

	/* 逆序 */
	for(i = 0, k = size - 1; i < k; i++, k--)
	{
		p[i] ^= p[k];
		p[k] ^= p[i];
		p[i] ^= p[k];
	}

	return string;
}

测试:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言itoa函数实现-数字面值转字符串 的相关文章

  • 【C/C++】报错问题积累

    1 出现Deprecated declaration XXX give arg types c文件中 有没有参数的函数时 声明需要加void即 main c void fun main h void fun void
  • fastcgi的环境变量

    FCGI ROLE RESPONDER SCRIPT FILENAME scripts 5 cgi QUERY STRING aaa 11111111111111 bbb 2222222222222222 ccc 3333333333333
  • C语言pcre库的使用及验证IP地址的合法性

    PCRE是一个用C语言编写的正则表达式函数库 它十分易用 同时功能也很强大 性能超过了POSIX正则表达式库和一些经典的正则表达式库 在使用PCRE库时 首先肯定是需要安装pcre的 不过一般的系统都会有自带的PCRE库 不过如果想使用最新
  • C++工程师复习题

    一 auto ptr 类使用必须满足下列限制 1 不要使用 auto ptr 对象保存指向静态分配对象的指针 2 不要使用两个 auto ptrs 对象指向同一对象 3 不要使用 auto ptr 对象保存指向动态分配数组的指针 4 不要将
  • typedef struct 用法详解

    typedef为C语言的关键字 作用是为一种数据类型定义一个新名字 当typedef与结构结合使用时 会有一些比较复杂的情况 而且在C语言和C 里面有略有差别 本文将详细讲解typedef struct的用法 第一篇 typedef str
  • C/C++中浮点数格式学习——以IEEE75432位单精度为例

    这是浮点数的通常表示形式 在IEEE754中 单精度浮点数有如下形式 32位单精度 单精度二进制小数 使用32个比特存储 1 8 23位长 S Exp Fraction 31 30至23偏正值 实际的指数大小 127 22至0位编号 从右边
  • 【C++】VS code如何配置使用C++(手把手教学)

    博 主 米码收割机 技 能 C Python语言 公众号 测试开发自动化 获取源码 商业合作 荣 誉 阿里云博客专家博主 51CTO技术博主 专 注 专注主流机器人 人工智能等相关领域的开发 测试技术 VS code如何配置使用C 手把手教
  • 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)<转>

    干货 Chrome插件 扩展 开发全攻略 不点进来看看你肯定后悔 写在前面 我花了将近一个多月的时间断断续续写下这篇博文 并精心写下完整demo 写博客的辛苦大家懂的 所以转载务必保留出处 本文所有涉及到的大部分代码均在这个demo里面 h
  • LeetCode题目笔记——17.19消失的两个数字

    文章目录 题目描述 题目难度 困难 方法一 暴力 代码 代码优化 方法二 数学方法 代码 总结 题目描述 题目直达 题目难度 困难 方法一 暴力 虽然题目说你能在 O N 时间内只用 O 1 的空间找到它们吗 但是也没有限制我们不能用暴力
  • 值得学习与推荐的c/c++框架和函数库

    这几天不上班 翻翻Evernote中记录的一些笔记 刚好有时间把记录的一些好玩链接转载一下 这篇文章里提到的很多库都用过 尤其是图像处理相关库 尤其是opencv及cximage 当时做图像算法时 很多算法就是从上面找来 然后自己修改的 比
  • 为何在新建STM工程中全局声明两个宏

    在uVision中新建STM32工程后 需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中 此时需要在工程设置 gt C C 选项卡下的Define文本框中键入这两个全局宏定义 STM32F40 41xxx USE STDPERIP
  • c语言判断一个数是否为偶数

    include
  • 模板的完全特例化和部分特例化

    介绍 完全特例化就是类型完全明确的版本 而部分特例化指的是 只知道是几个参数的函数而不知道参数的类型 或者是只知道是引用或者是指针类型 而不知道具体是char 还是 int 模板特例化实例1 template
  • Public Private Protect Inheritance and access specifiers

    In the previous lessons on inheritance we ve been making all of our data members public in order to simplify the example
  • C 语言教程:数据类型和格式说明符

    C 语言中的数据类型 C 中的变量必须是指定的 数据类型 并且您必须在 printf 函数中使用 格式说明符 来显示它 创建变量 int myNum 5 整数 没有小数点 float myFloatNum 5 99 浮点数 char myL
  • C/C++编程:令人印象深刻的高级技巧案例

    C C 编程语言在软件开发领域有着悠久的历史 由于其高效 灵活和底层访问能力 至今仍然被广泛应用 本文将介绍一些在C C 编程中令人印象深刻的高级技巧 帮助读者提升编程水平 更加高效地使用这两种强大的编程语言 一 指针运算与内存管理 C C
  • C++中的引用

    一 引用的概念 引用不是新定义一个变量 而是给已有变量取一个别名 编译器不会为引用变量开辟内存空间 而和它引用的变量共用一块内存空间 注意 由于C 兼容C 所以 既可以是引用符号 也可以是取地址 int a 0 int b a cout l
  • 在 Solaris 上,使用 gcc 编译的库与使用 cc 生成的库的使用方式是否相同?

    我目前正在尝试编译 libxml2在 Solaris 上 当我运行源代码提供的 configure 脚本时 会自动使用 gcc 和 g 编译器 但是 我想使用 cc 和 CC 编译器 所以我跑 configure CC cc CXX CC
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我
  • Woocommerce:添加第二个电子邮件地址不起作用,除非收件人是管理员

    我尝试了多种方法来向 Woocommerce 电子邮件添加其他收件人 但它似乎仅适用于主要收件人是管理员的测试订单 这些是我尝试过的片段 如果订单的客户是管理员 则电子邮件将发送到这两个地址 如果订单包含客户电子邮件地址 则仅发送至该电子邮

随机推荐

  • centos end trace

    每个人遇到的问题可能不一样吧 我也不是专业的运维 我只能说我自己的解决方法 错误 重启的时候出现的 百度 Google后感觉问题大概出现在内核版本上面在https www linuxquestions org questions slack
  • 写出一个抽奖页面,有200个人参加抽奖

    写出一个抽奖页面 有200个人参加抽奖 每次抽出一个人 不能重复 必须每个人都要抽中奖 前面10次抽奖要选中固定的10个人 每次就从这10人中随机抽取一人 不能重复 从第11次开始就从剩余的190人当中抽奖 不能重复 直到抽奖结束 已经中过
  • Java实现输出 1000 - 2000 之间所有的闰年

    我之前写过一篇文章 输出1 100之内的素数 其实是差不多的 可以参考一下 https blog csdn net question mark article details 100627185 关于闰年我们知道 有三种情况 分别是普通闰年
  • 软件测试/测试开发丨学习笔记之接口自动化测试

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接 https ceshiren com t topic 25120 一 接口自动化测试框架介绍 1 接口测试场景 2 自动化测试场景 3 接口自动化测试与 Web App 自动化测试区别
  • pands 表头字段自适应

    fields Unnamed 0 Unnamed 1 合计 人民币元 美元 合计 1 美元 1 沙特里亚尔 合计 2 人民币元 1 美元 2 沙特里亚尔 1 合计 3 美元 3 沙特里亚尔 2 cleaned sentence a 0 wh
  • 大模型时代,如何评估人工智能与人类智能?

    省时查报告 专业 及时 全面的行研报告库 省时查方案 专业 及时 全面的营销策划方案库 免费下载 2023年8月份全网热门报告合集 ChatGPT提词示例 让你的ChatGPT聪明100倍 超百页干货资料 AI应用的难点 痛点与未来 202
  • 软件测试最新项目合集【商城、外卖、银行、金融等等.......】

    项目一 ShopNC商城 项目概况 ShopNC商城是一个电子商务B2C电商平台系统 功能强大 安全便捷 适合企业及个人快速构建个性化网上商城 包含PC IOS客户端 Adroid客户端 微商城 系统PC 后台是基于ThinkPHP MVC
  • 同一个网站可以放2个服务器吗,两个网站放在同一个服务器 备案

    两个网站放在同一个服务器 备案 内容精选 换一换 介绍常见的安全组配置示例 如下示例中 出方向默认全通 仅介绍入方向规则配置方法 允许外部访问指定端口不同安全组内的弹性云服务器内网互通仅允许特定IP地址远程连接弹性云服务器SSH远程连接Li
  • python语法(高阶)-多线程编程

    演示多线程编程的使用 import time import threading def sing msg while True print msg time sleep 1 return None def dance msg while T
  • vue2+koa2+mongodb分页

    后端 const Koa require koa2 const Router require koa router const Monk require monk 链接mongodb数据库中间件 const app new Koa cons
  • 导入数据库

    导入数据库 数据库表 打开SQL Server数据库 选择数据库单击右键新建一个数据库表
  • Selenium爬虫实战丨Python爬虫实战系列(8)

    个人主页 互联网阿星 格言 选择有时候会大于努力 但你不努力就没得选 作者简介 大家好我是互联网阿星 和我一起合理使用Python 努力做时间的主人 如果觉得博主的文章还不错的话 请点赞 收藏 留言 支持一下博主哦 行业资料 PPT模板 简
  • 每天进步一点点-WPF-根据数据类型加载控件

    目的 根据数据类型的不同 动态的加载适用于不同数据类型的控件 布局 原理 为自定义的数据类型添加数据魔板 绑定的时候绑定这些数据类型的实例 例子 数据类型 数据模板
  • 达尔文商品管理

    什么是达尔文 达尔文是一套全新的商品管理体系 它不同于淘宝原来的分类法 基于类目属性体系 的管理思路 而是以最细粒度的产品节点 CSPU 为核心 使用系统 运营机制的方式维护一套丰富 准确的产品库 通过产品实现聚合 管控商品 以确保商品信息
  • Spring中typeAliasesPackage的作用

    typeAliasesPackage 是自动配置别名 也就是设置这个之后 在Mybatis的Mapper文件里就可以写对应的类名 而不用写全路径名了 例如 typeAliasesPackage xyz hashdog modules bea
  • UE4物体随着样条线(Spline)运动

    1 样条线原理 1 1 贝塞尔曲线 一定要经过起止点 若干个控制点用于控制曲线弯曲的方向 最终形成一条光滑的曲线 由于贝塞尔曲线点太多了不好控制 一般每四个点做一次贝塞尔曲线 得到的若干段相邻贝塞尔曲线的连接点需要共线且距离相同 即为C1连
  • Java 菜鸟入门

    前言 所谓进制转换 就是人们利用符号来计数的方法 进制转换由一组数码符号和两个基本因素 基数 和 位权 所构成 其中基数是指进位计数制中所采用的数码的个数 逢 n 进 1 中的 n 就是基数 而位权则指的是进位制中每一个固定位置所对应的单位
  • Vue PostCss插件——autoprefixer配置完成后无效,已解决

    在使用autoprefixer时 先前的配置能成功添加css浏览器前缀 但结合postcss pxtorem插件后 px可以转换为rem 但css前缀无效 经过几个小时的鼓捣 终于让我发现了蛛丝马迹 哈哈哈 好开心 好激动 一起来看一看博主
  • Vue.js面试题

    目录 1 如何再Vue的单文件组件里的样式定义全局CSS 2 vue router 3 1 0
  • C语言itoa函数实现-数字面值转字符串

    数字面值转字符串 思路 首先判断是否为负数若是则转为正数 将待转换的int类型值每次对10取余获得最低位的数字 将该数字转为字符面值 然后将int类型值除以10 直到等于0结束循环 此时由于是从int类型值的最低位开始取得 所以转换出来的字