C语言--数据到字符串的相互转换:将数据转换为2进制,16进制,10进制,8进制 字符串类型;字符串转换为整型 常用的函数 与stdlib 库函数说明

本文详细介绍了如何使用C语言中的stdlib.h库函数将整型数据转换为2进制、16进制和10进制字符串,以及如何将字符串转换回整型数据,包括使用atoi和strtol函数的过程和区别。
摘要由CSDN通过智能技术生成

 数据  --> 字符串(2进制16进制10进制8进制)

包含:整型数据转换为 2进制字符串; 整型数据转换为16机制数据;整型数据转换为 10进制字符串;

  1. 整型数据转换为  2 进制数据字符串:

#include <stdio.h>

// 将整数转换为二进制字符串
void int_to_binary(unsigned int num, char* binary) {
    int i;
    for (i = 31; i >= 0; i--) {
        binary[31 - i] = (num & (1 << i)) ? '1' : '0';
    }
    binary[32] = '\0'; // 添加字符串结束符
}

int main() {
    unsigned int num = 12345; // 要转换的整数
    char binary[33]; // 存储二进制字符串
    int_to_binary(num, binary);
    printf("Binary: %s\n", binary);
    return 0;
}

2.整型数据转换为 16进制数据字符串:

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

int main() {
    int num = 255;
    char str[20]; // 用于存储转换后的字符串,足够大以容纳转换结果
    snprintf(str, sizeof(str), "%x", num);
    printf("Hexadecimal representation: %s\n", str);
    return 0;
}

这段代码将整数 num 转换为十六进制字符串并打印出来。

3.整型数据转换为 10进制数据字符串:

#include <stdio.h>

int main() {
    int num = 12345;
    char str[20];  // 用于存储转换后的字符串
    snprintf(str, sizeof(str), "%d", num);  // 将整型转换为字符串
    printf("The string is: %s\n", str);  // 打印转换后的字符串
    return 0;
}

 4.整型数据转换为 8进制数据字符串:

#include <stdio.h>

int main() {
    int num = 1001;
    char str[20];  // 用于存储转换后的字符串
    snprintf(str, sizeof(str), "%o", num);  // 将整型转换为字符串
    printf("The string is: %s\n", str);  // 打印转换后的字符串
    return 0;
}

字符串(2进制16进制10进制8进制) --> 整型 数据 

 字符串数据转换为整型数据 直接使用 stdlib.h 库函数实现:

如2进制字符串转换为整型数据:

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

int main() {
    const char *binary_str = "1101"; // 二进制字符串
    unsigned long result = strtoul(binary_str, NULL, 2);
    printf("Binary string %s is equivalent to integer %lu\n", binary_str, result);
    return 0;
}

如16进制字符串转换为整型数据:

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

int main() {
    const char* hex_str = "123f";
    char* endptr;
    long int value = strtol(hex_str, &endptr, 16);
    
    if (*endptr != '\0') {
        printf("Conversion failed. Invalid character: %c\n", *endptr);
        return 1;
    }

    printf("Hexadecimal string \"%s\" converted to integer: %ld (0x%lx)\n", hex_str, value, value);
    return 0;
}

 如10进制字符串转换为整型数据:

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

int main() {
    const char *str = "12345"; // 字符串表示的数字
    int num = atoi(str); // 将字符串转换为整数
    printf("String %s is equivalent to integer %d\n", str, num);
    return 0;
}

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

int main() {
    const char *str = "12345"; // 要转换的字符串
    char *endptr; // 用于存储转换结束后的字符位置
    long num = strtol(str, &endptr, 10); // 转换为长整型,使用10进制
    if (*endptr != '\0') { // 如果 endptr 指向的字符不是结束符
        printf("Conversion failed: %s is not a valid number\n", str);
    } else {
        printf("Converted string %s to integer: %ld\n", str, num);
    }
    return 0;
}

atoistrtol 在功能上有些许差异:

  • atoi 函数将字符串转换为整数,它忽略任何前导空格,直到遇到第一个非空格字符开始解析数字,直到遇到非数字字符为止。
  • strtol 函数可以解析带符号的整数,并允许指定进制。第一个参数是要转换的字符串,第二个参数是一个指针,用于存储转换过程中遇到的第一个非法字符的位置(如果有的话),第三个参数是基数,即进制。例如,strtol("123", NULL, 10) 将字符串 "123" 解析为十进制数 123
  • 如 str= “1234a”;   atoi(str)-->1234;   strtol (str,&endptr,10); -> 会报解析错误 或 1234;   

所以,atoistrtol 在一些方面类似,但在细节上有所不同。通常来说,如果只是简单地将字符串转换为整数,使用 atoi 是更方便的选择,而如果需要更多的控制或者处理特殊情况,可以考虑使用 strtol

stdlib 库函数说明:

`stdlib.h` 头文件中包含了许多与字符串转换相关的函数。下面是一些常用的函数及其参数说明:

1. **atoi**:
   - 原型:`int atoi(const char *str);`
   - 功能:将字符串转换为整数。
   - 参数:`str`,要转换的字符串。
   - 返回值:转换后的整数值。

2. **atol**:
   - 原型:`long int atol(const char *str);`
   - 功能:将字符串转换为长整数。
   - 参数:`str`,要转换的字符串。
   - 返回值:转换后的长整数值。

3. **atoll**:
   - 原型:`long long int atoll(const char *str);`
   - 功能:将字符串转换为长长整数。
   - 参数:`str`,要转换的字符串。
   - 返回值:转换后的长长整数值。

4. **strtol**:
   - 原型:`long int strtol(const char *str, char **endptr, int base);`
   - 功能:将字符串转换为长整数。
   - 参数:`str`,要转换的字符串;`endptr`,用于存储转换结束后的字符位置;`base`,转换的进制,如 10 表示十进制。
   - 返回值:转换后的长整数值。

5. **strtoll**:
   - 原型:`long long int strtoll(const char *str, char **endptr, int base);`
   - 功能:将字符串转换为长长整数。
   - 参数:`str`,要转换的字符串;`endptr`,用于存储转换结束后的字符位置;`base`,转换的进制,如 10 表示十进制。
   - 返回值:转换后的长长整数值。

6. **strtoul**:
   - 原型:`unsigned long int strtoul(const char *str, char **endptr, int base);`
   - 功能:将字符串转换为无符号长整数。
   - 参数:`str`,要转换的字符串;`endptr`,用于存储转换结束后的字符位置;`base`,转换的进制,如 10 表示十进制。
   - 返回值:转换后的无符号长整数值。

7. **strtoull**:
   - 原型:`unsigned long long int strtoull(const char *str, char **endptr, int base);`
   - 功能:将字符串转换为无符号长长整数。
   - 参数:`str`,要转换的字符串;`endptr`,用于存储转换结束后的字符位置;`base`,转换的进制,如 10 表示十进制。
   - 返回值:转换后的无符号长长整数值。

以上是 `stdlib.h` 中一些常用的字符串转换函数及其参数说明。这些函数可以帮助您在 C 语言中进行字符串到整数或长整数的转换。

其他:


u32 convert_to_big_endian(char *bit_array)
{
    u32 result = 0;
    int i = 0;
    for (i = 0; i < 32; i++)
    {
        result |= (bit_array[i] ? 1 : 0) << (31 - i);
    }
    return result;
}


u32 convert_to_little_endian(char *bit_array)
{
    u32 result = 0;
    int i = 0;
    for (i = 0; i < 32; i++)
    {
        result |= (bit_array[i] ? 1 : 0) << i;
    }
    return result;
}


int set_addr_to_str(int addr, char *out_str)
{
    char cmd_data[70] = "0011100000000000000000000000010000000";
    char bin_array[10] = "000000000";
    char merge_array[70] = "0";
    int i = 0;

    merge_array[69] = '\0';

    for (i = 8; i >= 0; --i)
    {
        bin_array[i] = (addr & (1 << (8 - i))) ? '1' : '0';
    }

    bin_array[9] = '\0';

    printf("binarry:->%s |end\r\n", bin_array);

    for (i = 0; i < sizeof(cmd_data) / sizeof(char); i++) // cmd_data - > merge_array //保留 cmd_data 内容
    {
        merge_array[i] = cmd_data[i];
    }

    //	printf("merge11:->%s |end\r\n", merge_array);

    for (i = 0; i < 9; i++) // 5-14 bit 替换为地址数据
    {
        merge_array[5 + i] = bin_array[i];
    }

    merge_array[68] = '\0';
    merge_array[69] = '\0';
    //	printf("merge22:->%s |end\r\n",merge_array);

    for (i = 0; i < sizeof(merge_array) / sizeof(char); i++)
    {
        out_str[i] = merge_array[i];
    }

    return strlen(merge_array);
}

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值