C++笔记-使用sprintf把各个类型转成char*(long long, doule,int)

目录

 

 

背景

演示及代码


 

背景

在某些时候,不能使用其他的框架,只能使用标准的东西,进行操作,这此记录下,方便以后快速敲代码。

这个sprintf在stdio.h的头文件中。

本次有以下类型转成char*

int

long

long long

double

unsigned int

string

 

演示及代码

程序运行截图如下:

源码如下:

#include <stdio.h>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{

    long long longData = 1234567890123456;
    int intData = 255;
    unsigned int uintData = 0x11111111;
    string strData = "aaabbbcccddd12345";
    float floatData = 100.001;
    double doubleData = 100.000011;
    char charPData[64];

    sprintf(charPData, "%lld", longData);
    cout << "long long to char* : " << charPData << endl;

    sprintf(charPData, "%d", intData);
    cout << "int to char* : " << charPData << endl;

    sprintf(charPData, "%u", uintData);
    cout << "uint to char* : " << charPData << endl;

    cout << "string to char* : " << strData.c_str() << endl;

    sprintf(charPData, "%f", floatData);
    cout << "float to char* : " << charPData << endl;

    sprintf(charPData, "%lf", doubleData);
    cout << "double to char* : " << charPData << endl;

    cout << "--------------" << endl;
    sprintf(charPData, "Hello %lf", doubleData);
    cout << "in the end : " << charPData << endl;

    return 0;
}

 

### 将 `int` 类型数组转换为 `char*` 的方法 在 C/C++ 中,将 `int` 型数组转换为 `char*` 需要通过字符串处理的方式实现。以下是几种常见的解决方案: #### 方法一:使用标准库函数 `sprintf` 可以利用 `sprintf` 函数逐个将整数转换为字符串并拼接到目标缓冲区中。 ```c #include <stdio.h> #include <stdlib.h> void intArrayToCharArray(int array[], size_t length, char result[]) { for (size_t i = 0; i < length; ++i) { if (i != 0) { strcat(result, ", "); // 添加分隔符 } sprintf(&result[strlen(result)], "%d", array[i]); } } int main() { int numbers[] = {1, 2, 3, 4}; size_t length = sizeof(numbers) / sizeof(numbers[0]); // 计算足够的空间用于存储结果字符串 size_t bufferSize = length * 16 + 1; char* buffer = malloc(bufferSize); memset(buffer, '\0', bufferSize); intArrayToCharArray(numbers, length, buffer); printf("Resulting string: %s\n", buffer); free(buffer); return 0; } ``` 上述代码片段展示了如何将一个整数数组逐步转化为逗号分隔的字符串形式[^1]。 --- #### 方法二:手动编写转换逻辑 如果不想依赖于标准库中的 `sprintf` 或其他高级功能,可以通过手动计算每一位数字的方式来完成转换。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 手动将单个整数转为字符串 void itoa_custom(int value, char* buf, int base) { static const char digits[] = "0123456789"; unsigned n = value; if (value < 0 && base == 10) { *(buf++) = '-'; n = -n; } int len = snprintf(NULL, 0, "%u", n); char temp[len]; snprintf(temp, len + 1, "%u", n); strcpy(buf, temp); } // 转换整个数组 void intArrayToCharArrayCustom(int array[], size_t length, char result[]) { for (size_t i = 0; i < length; ++i) { if (i != 0) { strcat(result, ", "); } char numberStr[20]; itoa_custom(array[i], numberStr, 10); strcat(result, numberStr); } } int main() { int numbers[] = {1, 2, 3, 4}; size_t length = sizeof(numbers) / sizeof(numbers[0]); size_t bufferSize = length * 20 + 1; char* buffer = malloc(bufferSize); memset(buffer, '\0', bufferSize); intArrayToCharArrayCustom(numbers, length, buffer); printf("Resulting string: %s\n", buffer); free(buffer); return 0; } ``` 此方法提供了更底层的操作方式,适合对性能敏感的应用场景[^2]。 --- #### 方法三:借助 STL 容器(仅限 C++) 在现代 C++ 编程环境中,推荐使用 STL 提供的功能简化操作流程。 ```cpp #include <iostream> #include <vector> #include <sstream> std::string intVectorToString(const std::vector<int>& vec) { std::ostringstream oss; bool first = true; for (const auto& num : vec) { if (!first) { oss << ","; } oss << num; first = false; } return oss.str(); } int main() { std::vector<int> numbers = {1, 2, 3, 4}; std::string result = intVectorToString(numbers); std::cout << "Resulting string: " << result << std::endl; return 0; } ``` 这种方法不仅简洁易读,还充分利用了 C++ 标准模板库的优势[^3]。 --- ### 总结 以上三种方法分别适用于不同的开发环境和技术需求: - **方法一** 使用 `sprintf` 是最简单直接的选择; - **方法二** 展现了低级编程技巧,适合作为基础学习案例; - **方法三** 利用了现代化工具链,更适合实际项目开发。 无论采用哪种方案,在设计程序时都需注意内存分配与边界条件管理等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值