数据 --> 字符串(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;
}
atoi
和 strtol
在功能上有些许差异:
atoi
函数将字符串转换为整数,它忽略任何前导空格,直到遇到第一个非空格字符开始解析数字,直到遇到非数字字符为止。strtol
函数可以解析带符号的整数,并允许指定进制。第一个参数是要转换的字符串,第二个参数是一个指针,用于存储转换过程中遇到的第一个非法字符的位置(如果有的话),第三个参数是基数,即进制。例如,strtol("123", NULL, 10)
将字符串"123"
解析为十进制数123
。- 如 str= “1234a”; atoi(str)-->1234; strtol (str,&endptr,10); -> 会报解析错误 或 1234;
所以,atoi
和 strtol
在一些方面类似,但在细节上有所不同。通常来说,如果只是简单地将字符串转换为整数,使用 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);
}