C#,入门教程(23)——数据类型转换的一点基础知识

上一篇:

C#,入门教程(22)——函数的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124181689

先简单回顾一下,C#的数据类型大致有这样一些:
(1)原始类型:byte, bool, int, double, char, string...
(2)集合类型:List, Stack, Quene, Hashtable...
(3)自定类型:enum, struct, class...

本文仅仅局限于原始数据类型转换的问题。
这里要知道的是:byte, bool, int, double, char, string, List, Stack, Quene, Hashtable...等等,归根结底都是object class。

数据类型的转换是一门艺术,是编程的重要内容。
因而,要做好数据类型转换绝非易事。
包括但不限于下面的要求:
(1)可靠:数据不能丢,少、乱;
(2)速度:遭遇大量、超量的数据,类型转换算法的效率就成了整个系统的基础;
(3)可控:程序最不可避免的唯一的特性就是出错!几乎无法完成的任务只有稳定!如何把数据转换的错误控制在牢笼里,是很讲究的。

一、ToString()

所有数据的原始信息都是 byte。
所有数据类的最终体现都是字符串String(=string) 或者 图像Image。
这里要知道的是:byte,bool,int,double,char,string,List,Stack,Quene,Hashtable...等等都是class。
因而,所有数据类型都有其基本的 ToString() 方法。
自定义的数据类型(class)应该override。

int a = 10;
double b = 3.14;
string c = a.ToString() + b.ToString();
//c = "103.14"
//简约写法:
string c = a + " " + b;
// c = "10 3.14"

二、数据转换的部分典型实例

1、string vs char

string stringSource = "hello world!";
char[] charArray = stringSource.ToCharArray();string stringResult = new string(charArray);

2、string vs byte

所有数据的原始信息都是 byte。
计算机的所有数据都是按字节 byte 保存的。
这导致,不同的文字编码,文字的存储数据长度可能不同。
比如:

你好!
保存这两个字与一个标点符号的文件,在 DOS 或 Windows 或 iOS 或 Unix 或 Linux 下可能不同。
即使都是 Windows,即使都是 Windows 11,如果保存的时候选择不同的编码,比如 ASCII,或 Unicode 或 UTF-8 ,

因而,string/int/double vs byte 的转换与编码密切相关。
有关编码的知识,很多很多,自己搜 "C# 字符编码"

string stringSource = "hello world!";
Encoding utf8 = System.Text.Encoding.UTF8;
byte[] byteArray = utf8.GetBytes(stringSource);string stringResult = utf8.GetString(byteArray);

3、string vs int or double

关键是 String.Format 函数:

int a = 18;
double b = 3.14;
string sa = String.Format("{0:D4}", a);
//sa = "0018";
string sb = String.Format("{0:F8}", b);
//sb = "3.14000000";

更多使用方法,请搜 "C# String.Format"

string sa = "32";
int a = Int32.Parse(sa);

或:

string sb = "64";
if(Int32.TryParse(sb, out int a))
{;
}

三、数据转换的禁忌

1、少用强制类型转换!Convert!

Convert简化的类型转换的编程,但深深埋下了炸弹级别的错误隐患!
实验室写代码,无所谓了!工业软件,绝不能用Convert !
但我也鼓励大家从学校开始,就养成良好的编程习惯。
 

2、数据转换之前,一定要做数据的检查。

典型的工业软件级别的数据转换程序写法:

string unknowString = "";//...
//...if(IsInteger(unknowString)) 
{int intValue = Int32.Parse(unknowString);
}
else 
{throw new Exception("ERROR invalid integer string " + unknowString);
}

很麻烦?
程序写的越麻烦,后面的使用与运行就越可靠!

下一篇:

https://blog.csdn.net/beijinghorn/article/details/124204317icon-default.png?t=N7T8http://C#%EF%BC%8C%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B(24)%E2%80%94%E2%80%94%E7%B1%BB%E7%B4%A2%E5%BC%95%E5%99%A8%EF%BC%88this%EF%BC%89%E7%9A%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86
 

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

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

相关文章

智慧文旅一机游:科技与文化的完美结合,引领智慧文旅新潮流,智慧旅游未来已来

一、科技与文化的完美结合:智慧文旅一机游的核心理念 智慧文旅一机游,是科技与文化相融合的产物,它不仅代表着旅游行业的创新与发展,更是一种文化与科技完美结合的生活方式。一机游的核心理念在于通过先进的科技手段,提…

IOT pwn

已经过了填坑的黄金时期 环境搭建 交叉编译工具链 很多开源项目需要交叉编译到特定架构上,因此需要安装对应的交叉编译工具链。 sudo apt install gcc-arm-linux-gnueabi g-arm-linux-gnueabi -y sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu -…

两道日常练习题:洛谷P1165日志分析 + 洛谷P1553 数字反转(升级版)

两道题的代码我都会附着文字详解,并且会简洁说明一下思路: 先看第一套题目: 题干: 输入输出: 数据范围: 这很明显是一道栈的问题,我们只需要根据题意模拟即可,需要注意的是当输入的…

动手做个无人机—材料篇

基于浙江大学Fast-Lab(高飞,潘能)和深蓝学院合作课程:第二课:动力套焊接_哔哩哔哩_bilibili 无人机材料1: 1、NUC 猛虎峡谷 准系统 i5薄款: 一款机载电脑,使用i5-1135G7 ,最大内存64G&#xff…

八股文学习日常第一期(20240121)

零、前言 1、目的 帮助掌握面试题,就八股文相关内容展开进行学习和整理,也方便之后的复习和巩固。 2、八股文内容来源 ①https://blog.csdn.net/w20001118/article/details/125724647 一、具体内容分析 1、类的完整书写方式 1.1、类 [Access Mod…

7.【CPP】String类

一.汉字的编码 我们知道计算机存储英文字母,标点,数字用的是ascall码,128种用一个字节表示绰绰有余。而汉字远远不止128种,因此汉字需要两个字节表示。 1.gbk编码中汉字占两个字节。 2.utf-8中,一个汉字占三个字节。…

【博士每天一篇论文-技术综述】Machine Learning With Echo State Networks 一篇系统讲解ESN知识的五星文章

阅读时间:2023-11-21 1 介绍 年份:2020 作者:徐元超,曼尼托巴大学 期刊: 无 引用量:无 这篇文章是一篇技术报告,从递归神经网络(RNNs)引入到回声状态网络(…

Unity中实现捏脸系统

前言 目前市面上常见的捏脸一般是基于BlendShapes和控制骨骼点坐标两种方案实现的。后者能够控制的精细程度更高,同时使用BlendShapes来控制表情。 控制骨骼点坐标 比如找到控制鼻子的骨骼节点修改localScale缩放,调节鼻子大小。 BlendShapes控制表…

【数学笔记】集合及简要逻辑

集合 基础简要逻辑集合间的关系与运算 基础 集合定义:把一些能够确定的不同对象组成的整体叫做一个集合,每个对象叫做元素。集合记法:一般用大写字母 A , B , C . . . . . . A,B,C...... A,B,C......表示集合,小写字母 a , b ,…

分布式锁实现(mysql,以及redis)以及分布式的概念

道生一,一生二,二生三,三生万物 我旁边的一位老哥跟我说,你知道分布式是是用来干什么的嘛?一句话给我干懵了,我能隐含知道,大概是用来做分压处理的,并增加系统稳定性的。但是具体如…

特征融合篇 | YOLOv8 引入长颈特征融合网络 Giraffe FPN

在本报告中,我们介绍了一种名为DAMO-YOLO的快速而准确的目标检测方法,其性能优于现有的YOLO系列。DAMO-YOLO是在YOLO的基础上通过引入一些新技术而扩展的,这些技术包括神经架构搜索(NAS)、高效的重参数化广义FPN(RepGFPN)、带有AlignedOTA标签分配的轻量级头部以及蒸馏增…

android usb2.0 协议基础(1)

1-USB 基本知识 USB的重要关键概念: 1、 端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点) 2…

ORB-SLAM 论文阅读

论文链接 ORB-SLAM 0. Abstract 本文提出了 ORB-SLAM,一种基于特征的单目同步定位和建图 (SLAM) 系统该系统对严重的运动杂波具有鲁棒性,允许宽基线环路闭合和重新定位,并包括全自动初始化选择重建的点和关键帧的适者生存策略具有出色的鲁棒…

Android 基础技术——View 的宽高

笔者希望做一个系列,整理 Android 基础技术,本章是关于 View 的宽高 Activity Resume 的时候设置或者获取view的宽高是否有效? 回答:不确定。 首次 onResume 无效,二次 onResume 就有效了。 回顾「Android 基础技术——addView 流…

Eclipses安装教程

一、下载开发工具包 1、开发工具包JDK 下载地址链接:https://www.oracle.com/cn/java/technologies/downloads/ 下载教程: 1)点击链接,可以跳转到页面 2)下滑页面,找到开发工具包 3) 记住下载之…

初识C语言·自定义类型(1)

目录 1 联合体类型的声明 2 联合体的特点 3 联合体的大小计算 4 枚举类型类型的声明 5 枚举的优点 1 联合体类型的声明 联合体,顾名思义,是多个对象连在一起的,即联合体的成员都是共用空间的,所以联合体也叫做共用体&#xf…

Java开发分析工具 JProfiler的详细使用方法解析(附 JProfiler for Mac许可证秘钥)

JProfiler 是一款功能强大的Java代码分析工具,JProfiler的直观UI可帮助您解决性能瓶颈,确定内存泄漏并了解线程问题且JProfiler Mac破解版配置会话非常简单,第三方集成使得入门变得轻而易举,并且以自然的方式呈现数据分析。 解…

万物简单AIoT 端云一体实战案例学习 之 快速开始

学物联网,来万物简单IoT物联网!! 下图是本案的3步导学,每个步骤中实现的功能请参考图中的说明。 1、简介 物联网具有场景多且复杂、链路长且开发门槛高等特点,让很多想学习或正在学习物联网的学生或开发者有点不知所措,甚至直接就放弃了。    万物简单AIoT物联网教育…

72.批量执行Redis命令的4种方式!

文章目录 前言一、Redis命令执行过程二、原生批量命令三、pipeline(管道)四、Lua脚本五、Redis事务六、Redis Cluster模式下该如何正确使用批量命令操作? 前言 在我们的印象中Redis命令好像都是一个个单条进行执行的,但实际上我们是可以批量执行Redis命…

二层交换机和三层交换机

二层交换机:将源mac和端口进行转发,是同一个网段进行通信的,不能实现路由转发,若想跨网段则需要接入一个路由器 如:pc1 192.168.1.1 与 pc2 192.168.1.2通信需要经过二层交换机,二层交换机不能配置ip的&am…