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

 数据  --> 字符串(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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python: inspect模块各函数的用法

python: inspect模块各函数的用法 inspect模块也被称为 检查现场对象。这里的重点在于“现场”二字&#xff0c;也就是当前运行的状态。 inspect模块提供了一些函数来了解现场对象&#xff0c;包括 模块、类、实例、函数和方法。 inspect函数主要用于以下四个方面 对是否是模…

浅谈如何自我实现一个消息队列服务器(1)——需求分析

文章目录 一、什么是消息队列&#xff1f;二、当下主流的消息队列(MQ)三、自我实现一个消息队列服务器的前期准备——需求分析3.1 核心概念3.2 broker server 核心概念3.2.1、虚拟主机&#xff08;Virtual Host&#xff09;3.2.2、交换机&#xff08;Exchange&#xff09;3.2.2…

shopee店铺降权了怎么办?shopee店铺降权恢复步骤

当您发现自己的Shopee店铺被降权时&#xff0c;这意味着您的产品在搜索结果中的排名下降&#xff0c;从而可能导致流量和销售额的减少。面对这种情况&#xff0c;您需要采取一系列措施来恢复或提升店铺的权重。以下是一些具体的步骤和拓展的原因分析&#xff1a;一&#xff1a;…

3、设计模式之工厂模式2(Factory)

一、什么是工厂模式 工厂模式属于创建型设计模式&#xff0c;它用于解耦对象的创建和使用。通常情况下&#xff0c;我们创建对象时需要使用new操作符&#xff0c;但是使用new操作符创建对象会使代码具有耦合性。工厂模式通过提供一个公共的接口&#xff0c;使得我们可以在不暴露…

【深度学习笔记】7_7 AdaDelta算法

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 7.7 AdaDelta算法 除了RMSProp算法以外&#xff0c;另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的…

嵌入式驱动学习第三周——linux内核链表

前言 在 Linux 内核中使用最多的数据结构就是链表了&#xff0c;其中就包含了许多高级思想。 比如面向对象、类似C模板的实现、堆和栈的实现。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博…

C#无法给PLC写入数据原因分析

一、背景 1.1 概述 C#中无法给PLC写入数据的原因有很多&#xff0c;这里分享网络端口号被占用导致无法写入的确认方法 1.2 环境 ①使用三菱PLC ②C#通过网口与PLC进行通讯 二、现象 1.1 代码 通过HslCommunication连接PLC时&#xff0c;连接返回成功&#xff0c;写入返回失败 …

snakeflow的springboot项目

Gitee搜索“liuxz/snakerflow”&#xff0c;它是spring boot集成了一款国产工作流引擎snakerflow。 下面是安装步骤&#xff1a; 创建数据库snaker-web&#xff0c;字符集设置成utf8mb4和utf8mb4_generic。不然的话&#xff0c;中文插入不进去。 运行sql命令 CREATE TABLE …

Kotlin:泛型

点击查看泛型中文文档 点击查看泛型英文文档 简介 与 Java 类似&#xff0c;Kotlin 中的类也可以有类型参数&#xff1a; class Box<T>(t: T) {var value t }一般来说&#xff0c;要创建这样类的实例&#xff0c;我们需要提供类型参数&#xff1a; val box: Box<…

调试安卓 gles性能瓶颈

目录 下载Arm Performance Studio编译Unity Shader运行malios调试用处和限制 原文请见&#xff1a;参考地址 使用mali offline shader compiler分析shader的性能瓶颈。 下载Arm Performance Studio 下载地址 编译Unity Shader 通常选择GLES3x。 You might need to select G…

智能控制:物联网智能插座对接文档

介绍 一开始买的某米的插座&#xff0c;但是好像接口不开放&#xff0c;所以找到了这个插座&#xff0c;然后自己开发了下&#xff0c;用接口控制插座开关。wifi的连接方式&#xff0c;通电后一般几秒后就会连接上wifi&#xff0c;这个时候通过接口发送命令给他。 产品图片 通…

idea配置自定义注释模版和其他模板

项目场景&#xff1a; idea配置自定义模版 自定义注释模版其他模板&#xff0c;包括syso快捷键&#xff0c;swith快捷键等 自定义注释模版 1、File and Code Templates 第一种类创建完后头部自动生成注释模板 打开idea&#xff0c;选择 Settings--> Editor--> File a…

nvm安装不同版本的node

在项目开发过程中&#xff0c;不同项目依赖的node版本不同&#xff0c;但频繁的卸载和安装很麻烦&#xff0c;这篇文章介绍nvm安装过程 1.nvm安装 这个网上随便找一篇跟着安装即可 nvm安装教程 2.nvm安装不同版本的node 网上普遍的方式是&#xff1a; 找到nvm安装目录下的s…

浅谈LockBit勒索病毒

在数字时代&#xff0c;随着科技的飞速发展&#xff0c;网络安全问题愈发凸显。恶意软件和勒索软件等网络威胁正不断演变&#xff0c;其中一款备受关注的勒索软件就是LockBit。 LockBit是一种高度复杂且具有破坏性的勒索软件。与传统的勒索软件相比&#xff0c;LockBit在其攻击…

# Java网络编程入门与实践:构建简单的Socket通信应用

导言 随着互联网的不断发展&#xff0c;网络编程在软件开发领域中变得愈发重要。本文将引导您进入Java网络编程的世界&#xff0c;通过简单而实用的Socket通信实例&#xff0c;帮助您理解网络编程的基本概念和技术。让我们一起动手&#xff0c;构建一个简单的客户端-服务器应用…

NVMFS5A160PLZT1G汽车级功率MOSFET P沟道60 V 15A 满足AEC-Q101标准

关于汽车电子AEC Q101车规认证&#xff1f; 是一种针对分立半导体的可靠性测试认证程序&#xff0c;由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性、温度循环和湿度变化等…

新建项目module,但想归到一个目录下面

1. 想建几个module, 例如 component-base-service,component-config-service, 但是module多了会在CloudAction下面显示很多目录, 所以想把它们归到components模块下面去, 类似于下图的效果 2. 创建过程 右击CloudAction 新建 module -> 选maven类型 输入components, 建成后删…

Capture One 23:光影魔术师,细节掌控者mac/win版

Capture One 23&#xff0c;不仅仅是一款摄影后期处理软件&#xff0c;它更是摄影师们的得力助手和创意伙伴。这款软件凭借其卓越的性能、丰富的功能和前沿的技术&#xff0c;为摄影师们带来了前所未有的影像处理体验。 Capture One 23 软件获取 Capture One 23以其强大的色彩…

【C语言】Infiniband驱动mlx4_load_one函数

一、中文注释 以下是针对mlx4_load_one函数的主要代码路径的中文注释。该函数是用于加载并初始化Mellanox网络设备的驱动函数。通过注释&#xff0c;可以了解函数在初始化过程中执行的关键步骤。 /* mlx4_load_one函数&#xff1a;用于加载并初始化PCI设备&#xff08;例如网…