文章目录

  • 前言
  • 语法
  • 参数
    • value
    • 宽限
    • 基数 radix
    • 大小 size
  • 返回值
  • 备注
  • 重要
  • 最大转换计数宏
  • 一般文本例程映射
  • 要求
  • 示例
  • 原文网址

前言

将整数转换为字符串。 提供这些函数的更多安全版本,请参阅 _itoa_s、_itow_s 函数。


语法

char * _itoa( int value, char *buffer, int radix );
char * _ltoa( long value, char *buffer, int radix );
char * _ultoa( unsigned long value, char *buffer, int radix );
char * _i64toa( long long value, char *buffer, int radix );
char * _ui64toa( unsigned long long value, char *buffer, int radix );wchar_t * _itow( int value, wchar_t *buffer, int radix );
wchar_t * _ltow( long value, wchar_t *buffer, int radix );
wchar_t * _ultow( unsigned long value, wchar_t *buffer, int radix );
wchar_t * _i64tow( long long value, wchar_t *buffer, int radix );
wchar_t * _ui64tow( unsigned long long value, wchar_t *buffer, int radix );// These POSIX versions of the functions have deprecated names:
char * itoa( int value, char *buffer, int radix );
char * ltoa( long value, char *buffer, int radix );
char * ultoa( unsigned long value, char *buffer, int radix );// The following template functions are C++ only:
template <size_t size>
char *_itoa( int value, char (&buffer)[size], int radix );template <size_t size>
char *_itoa( long value, char (&buffer)[size], int radix );template <size_t size>
char *_itoa( unsigned long value, char (&buffer)[size], int radix );template <size_t size>
char *_i64toa( long long value, char (&buffer)[size], int radix );template <size_t size>
char * _ui64toa( unsigned long long value, char (&buffer)[size], int radix );template <size_t size>
wchar_t * _itow( int value, wchar_t (&buffer)[size], int radix );template <size_t size>
wchar_t * _ltow( long value, wchar_t (&buffer)[size], int radix );template <size_t size>
wchar_t * _ultow( unsigned long value, wchar_t (&buffer)[size], int radix );template <size_t size>
wchar_t * _i64tow( long long value, wchar_t (&buffer)[size], int radix );template <size_t size>
wchar_t * _ui64tow( unsigned long long value, wchar_t (&buffer)[size],int radix );

参数

value

要转换的数字。

宽限

保存转换结果的缓冲区。

基数 radix

用于转换值的基数, 该值必须在2-36 范围内。

大小 size

缓冲区的长度(以字符类型的单位表示)。 此参数是从 c + + 中的 buffer 参数推断出来的。

返回值

其中每个函数均返回一个指向 缓冲区的指针。 无错误返回。

备注

_Itoa、 _ltoa、 _ultoa、 _i64toa和 _ui64toa函数将给定值参数的数字转换为以 null 结尾的字符串,并将 (、 _Itoa和 _ltoa 的结果_ultoa 最多33个字符65,在缓冲区中存储 _i64toa 和 _ui64toa) 的结果。 如果 基数 等于10并且 值 为负,则存储字符串的第一个字符为减号 (-) 。 _Itow、 _ltow、 _ultow、 _i64tow和 _ui64tow函数分别是 _itoa、 _ltoa、 _ultoa、 _i64toa和 _ui64toa的宽字符版本。

重要

这些函数可以写入超过太小缓冲区末尾的部分。 若要防止缓冲区溢出,请确保 缓冲区 的大小足以容纳转换后的数字加上尾随的 null 字符和符号字符。 这些函数的误用可能导致代码中出现严重的安全问题。
由于可能存在安全问题,因此默认情况下,这些函数会导致弃用警告 C4996: 此函数或变量可能不安全。请考虑改用 safe_function 。若要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。 建议更改源代码,以使用警告消息所建议的 safe_function 。 更安全的函数不能写入超过指定缓冲区大小的字符。 有关详细信息,请参阅 _itoa_s、_itow_s 函数。
若要在不使用弃用警告的情况下使用这些函数,请在包含任何 CRT 标头之前定义 _CRT_SECURE_NO_WARNINGS 预处理器宏。 可以在开发人员命令提示符下的命令行中执行此操作,方法是将 /D_CRT_SECURE_NO_WARNINGS 编译器选项添加到 cl 命令。 否则,在源文件中定义宏。 如果使用预编译标头,请在 Visual Studio 2017 和更早) 版本中预编译标头包含文件、 pch (stdafx.h 的顶部定义宏。 若要在源代码中定义宏,请在包含任何 CRT 标头之前使用 #define 指令,如以下示例中所示:

By default, this function's global state is scoped to the application. To change this, see [Global state in the CRT](../global-state.md).#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>

在 c + + 中,这些函数具有调用更安全的副本的模板重载。 有关详细信息,请参阅安全模板重载。
POSIX 名称 itoa、 ltoa和 ultoa 作为 _itoa、 _ltoa和 _ultoa 函数的别名存在。 POSIX 名称已弃用,因为它们不遵循 ISO C 的特定于实现的全局函数名称约定。默认情况下,这些函数会导致弃用警告 C4996: 此项的 POSIX 名称已弃用。请改用与 ISO C 和 c + + 一致的名称: new_name。 建议更改源代码以使用这些函数的更安全版本, _itoa_s、 _ltoa_s或 _ultoa_s。 有关详细信息,请参阅 _itoa_s、_itow_s 函数。
对于源代码可移植性,你可能想要在代码中保留 POSIX 名称。 若要在不使用弃用警告的情况下使用这些函数,请在包含任何 CRT 标头之前定义 _CRT_NONSTDC_NO_WARNINGS 和 _CRT_SECURE_NO_WARNINGS 预处理器宏。 可以在开发人员命令提示符下的命令行中执行此操作,方法是将 /D_CRT_SECURE_NO_WARNINGS 和 /D_CRT_NONSTDC_NO_WARNINGS 编译器选项添加到 cl 命令。 否则,在源文件中定义宏。 如果使用预编译标头,请在预编译头包含文件的顶部定义宏。 若要在源代码中定义宏,请在包含任何 CRT 标头之前使用 #define 指令,如以下示例中所示:

#define _CRT_NONSTDC_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>

最大转换计数宏

为了帮助您为转换创建安全缓冲区,CRT 包含了一些便利的宏。 它们定义了转换若干公共基类型的每个整数类型的最大可能值(包括 null 结束符和符号字符)所需的缓冲区大小。 若要确保转换缓冲区足够大,以便在 基数指定的基础中接收任何转换,请在分配缓冲区时使用其中一个已定义的宏。 这有助于防止在将整型类型转换为字符串时出现缓冲区溢出错误。 当你在源中包括 stdlib.h 或 wchar 时,将定义这些宏。
若要在字符串转换函数中使用其中一种宏,请声明相应字符类型的转换缓冲区,并将该宏值用于 integer 类型,将 base 作为缓冲区维度。 此表列出了适用于所列基的每个函数的宏:

函数 radix
_itoa, _itow 16
10
8
2
_MAX_ITOSTR_BASE16_COUNT
_MAX_ITOSTR_BASE10_COUNT
_MAX_ITOSTR_BASE8_COUNT
_MAX_ITOSTR_BASE2_COUNT
_ltoa, _ltow 16
10
8
2
_MAX_LTOSTR_BASE16_COUNT
_MAX_LTOSTR_BASE10_COUNT
_MAX_LTOSTR_BASE8_COUNT
_MAX_LTOSTR_BASE2_COUNT
_ultoa, _ultow 16
10
8
2
_MAX_ULTOSTR_BASE16_COUNT
_MAX_ULTOSTR_BASE10_COUNT
_MAX_ULTOSTR_BASE8_COUNT
_MAX_ULTOSTR_BASE2_COUNT
_i64toa, _i64tow 16
10
8
2
_MAX_I64TOSTR_BASE16_COUNT
_MAX_I64TOSTR_BASE10_COUNT
_MAX_I64TOSTR_BASE8_COUNT
_MAX_I64TOSTR_BASE2_COUNT
_ui64toa, _ui64tow 16
10
8
2
_MAX_U64TOSTR_BASE16_COUNT
_MAX_U64TOSTR_BASE10_COUNT
_MAX_U64TOSTR_BASE8_COUNT
_MAX_U64TOSTR_BASE2_COUNT

此示例使用转换计数宏来定义一个缓冲区,该缓冲区足以 unsigned long long 在第2个中包含 a:

#include <wchar.h>
#include <iostream>
int main()
{wchar_t buffer[_MAX_U64TOSTR_BASE2_COUNT];std:wcout << _ui64tow(0xFFFFFFFFFFFFFFFFull, buffer, 2) << std::endl;
}

一般文本例程映射

Tchar.h 例程 未定义 _UNICODE 和 _MBCS 已定义 _MBCS 已定义 _UNICODE
_itot _itoa _itoa _itow
_ltot _ltoa _ltoa _ltow
_ultot _ultoa _ultoa _ultow
_i64tot _i64toa _i64toa _i64tow
_ui64tot _ui64toa _ui64toa _ui64tow

要求

例程所返回的值 必需的标头
itoa、 ltoa、 ultoa <stdlib.h>
_itoa、 _ltoa、 _ultoa、 _i64toa、 _ui64toa <stdlib.h>
_itow、 _ltow、 _ultow、 _i64tow、 _ui64tow <stdlib.h> 或 <wchar.h>

这些函数和宏是 Microsoft 特定的。 有关兼容性的详细信息,请参阅兼容性。

示例

此示例演示如何使用一些整数转换函数。 请注意,使用 _CRT_SECURE_NO_WARNINGS 宏使警告 C4996 安静。

// crt_itoa.c
// Compile by using: cl /W4 crt_itoa.c
// This program makes use of the _itoa functions
// in various examples.#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>      // for printf
#include <string.h>     // for strnlen
#include <stdlib.h>     // for _countof, _itoa fns, _MAX_COUNT macrosint main(void)
{char buffer[_MAX_U64TOSTR_BASE2_COUNT];int r;for (r = 10; r >= 2; --r){_itoa(-1, buffer, r);printf("base %d: %s (%d chars)\n", r, buffer,strnlen(buffer, _countof(buffer)));}printf("\n");for (r = 10; r >= 2; --r){_i64toa(-1LL, buffer, r);printf("base %d: %s (%d chars)\n", r, buffer,strnlen(buffer, _countof(buffer)));}printf("\n");for (r = 10; r >= 2; --r){_ui64toa(0xffffffffffffffffULL, buffer, r);printf("base %d: %s (%d chars)\n", r, buffer,strnlen(buffer, _countof(buffer)));}
}

Output

base 10: -1 (2 chars)
base 9: 12068657453 (11 chars)
base 8: 37777777777 (11 chars)
base 7: 211301422353 (12 chars)
base 6: 1550104015503 (13 chars)
base 5: 32244002423140 (14 chars)
base 4: 3333333333333333 (16 chars)
base 3: 102002022201221111210 (21 chars)
base 2: 11111111111111111111111111111111 (32 chars)base 10: -1 (2 chars)
base 9: 145808576354216723756 (21 chars)
base 8: 1777777777777777777777 (22 chars)
base 7: 45012021522523134134601 (23 chars)
base 6: 3520522010102100444244423 (25 chars)
base 5: 2214220303114400424121122430 (28 chars)
base 4: 33333333333333333333333333333333 (32 chars)
base 3: 11112220022122120101211020120210210211220 (41 chars)
base 2: 1111111111111111111111111111111111111111111111111111111111111111 (64 chars)base 10: 18446744073709551615 (20 chars)
base 9: 145808576354216723756 (21 chars)
base 8: 1777777777777777777777 (22 chars)
base 7: 45012021522523134134601 (23 chars)
base 6: 3520522010102100444244423 (25 chars)
base 5: 2214220303114400424121122430 (28 chars)
base 4: 33333333333333333333333333333333 (32 chars)
base 3: 11112220022122120101211020120210210211220 (41 chars)
base 2: 1111111111111111111111111111111111111111111111111111111111111111 (64 chars)

原文网址

原文网址

itoa、_itoa、ltoa、_ltoa、ultoa、_ultoa、_i64toa、_ui64toa、_itow、_ltow、_ultow、_i64tow、_ui64tow (转载)相关推荐

  1. c语言itoa error C4996,_itoa、_itow函数 | Microsoft Docs

    itoa, _itoa, ltoa, _ltoa, ultoa, _ultoa, _i64toa, _ui64toa, _itow, _ltow, _ultow, _i64tow, _ui64tow ...

  2. C语言 itoa函数及atoi函数

    C语言 itoa函数及atoi函数 itoa函数及atoi函数 2007-05-11 13:52 C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用ito ...

  3. 编写STM32 C程序:字符串String转数字, 数字转字符串String

    一 数字类型与字符串类型 在做嵌入式C程序开发中,如果通信协议采用字符串方式来交互数据,比如使用到AT指令格式,或者需要GUI界面的显示,那么就会经常用到数字类型与字符串类型的转换.在C语言标准库st ...

  4. VC中数字与字符串转换方法

    VC中数字与字符串转换方法 u     字符串转数字   l         1.CRT函数     ASCII UNICODE TCHAR VS2005 int atoi _wtoi _tstoi, ...

  5. 打印出ntdll.dll中所有函数名字和地址

    0x01 打印出ntdll.dll中所有函数名字和地址 0x02 在任何进程中都可以找到ntdll.dll和kernel32.dll这个动态链接库的基地址,另外每一个动态链接库基地址实际上都存放在一个 ...

  6. Windows下程序向Linux下移植实践

    一.问题的提出 在程序员中有这样一个说法,若一个程序不能移植到Linux下,那这个程序将看不到未来. 由于Linux操作系统源码公开是的,开发库等辅助工具都是源码公开的,这样就减少了程序的不可预知性, ...

  7. 性能 - 字符串数值类型转换

    字符串数值转换,性能对比,批量转换可以考虑使用sscanf sscanf sscanf使用demo: split+atof 和sscanf性能对比 其他函数性能对比 The following are ...

  8. 移植UPnP CyberLink库到WinCE的问题与解决方法

    WinCE应用程序开发接口通Windows相同,主要分为分为MFC.ALT.C/C++ run-time library.Win32等4类. WinCE Application Frameworks ...

  9. 将数字n转换为字符串并保存到s中

    将数字n转换为字符串并保存到s中 参考 C程序设计语言 #include <stdio.h> #include <string.h> //reverse函数: 倒置字符串s中各 ...

最新文章

  1. UVA11419 我是SAM
  2. Python之max(num, key=lambda x:x[0])用法的详细解析
  3. zcmu-1182(大数相减)
  4. mysql查看索引创建进度_SQL Server查看索引重建、重组索引进度
  5. codeblocks如何让输出结果 空格_简单讲讲如何实现两个正整数相加,然后输出这个结果...
  6. python是语言还是软件_程序开发语言之Python:是追逐还是坚守?
  7. java 整形数据类型_3.2Java基本数据类型之整型
  8. JAVA之CRC校验算法
  9. MIUI 13 去除输入法广告
  10. 加密货币如何改变着IT产业
  11. 如何把图片裁剪为圆形
  12. 粒子追踪 matlab,粒子追踪软件 - 研究粒子与场的相互作用
  13. 什么是企业邮箱,如何申请企业邮箱,企业邮箱一年多少钱?
  14. IOS获取农历节日.节气
  15. 多类隶属度的模糊支持向量机(FSVM)
  16. 关于IT服务管理的服务台
  17. PIC18F2455/2550/4455/4550之通用串行总线USB
  18. 编程语言(高级语言)的划分与描述
  19. Python爬虫之Scrapy库的下载和安装
  20. 格物钛智能科技CEO崔运凯:数据价值跃迁,洞见下一代变革力量

热门文章

  1. 【C++】对拷贝构造函数 深浅拷贝 的理解 拷贝构造函数作用及用途?什么时候需要自定义拷贝构造函数?
  2. 【ShawnZhang】带你看蓝桥杯—— 算法提高 阮小二买彩票
  3. 电脑加了内存条后,C盘空间突然被占用的解决办法!!!
  4. 2014秋C++ 学术休假期间程序设计自主学习及实践方案
  5. JS replace替换字符串所有匹配字符
  6. vue class动态类名
  7. 重排和重绘理解及解决方法
  8. 计算机系统装机教程,电脑装机教程,详细教您如何给电脑装机
  9. 离散傅里叶变换(DFT)(一)
  10. 中文停用词表——哈工大停用词表