如何快速获取字符串的UTF-8或UTF-16编码二进制数据?数值转换成字符串itoa不是C标准?其它类型转换成字符串?其它类型转换成数值类型?

目录

如何快速获取字符串的UTF-8或UTF-16编码二进制数据?

数值转换成字符串itoa不是C标准?

其它类型转换成字符串

其它类型转换成数值类型

转换成数值的API

为什么有的编程语言允许字符串和整数相加?

字符串拼接

字符串字面量自动连接


如何快速获取字符串的UTF-8或UTF-16编码二进制数据?

  • 在线字符编码转换网站
  • Swift提供了非常简洁的编码二进制数据查看方法
    let s = "a我a"
    s.utf8.forEach { print($0, terminator: " ") } // UTF-8: 97 230 136 145 97
    s.utf16.forEach { print($0, terminator: " ") }
     // UTF-16: 97 25105 97

数值转换成字符串itoa不是C标准?

itoa确实不是C标准规定,却是广泛被使用的非标准。建议使用标准库sprintf来实现itoa的功能。itoa不是标准可能有些难以理解,事实上,早期itoa存在多种不同风格参数,字符串也并不是C语言的一等公民,设计这个API反而产生更多负担和困扰。

其它类型转换成字符串

大部分编程语言将一个变量转换成字符串,一般会经过toString方法或者类型转换方法,形如C语言的itoa.

  • Swift提供一种极其优雅的方法,可以用 \(VAR) 做转换。

var i = 10

let str = "I have \(i) apples"

print(str)

  • JS
    • 基本类型
      null --> "null", undefined --> "undefined" (注意不是空字符串), 布尔类型分别是"true"和"false", 字符串本身就返回自身,Number类型转换成对应的字符串,比如12 --> "12", 1.23 --> "1.23".
    • 引用类型:先调用toString函数,如果得到基本类型,按上面规则转换字符串;如果不满足,继续调用valueOf函数,如果还是基本类型,再次重复上面的转换;如果还不满足,抛出异常。
  • 仓颉
    基本类型可调用toString()函数转换成字符串。
  • C#
    • 语言定义了基本类型ToString()方法,自定义类可以重写ToString()方法。
  • VB
    • Str(num) 函数可以将数值转换成字符串,num可以是整数或浮点数,不能是非数值字符。注意,如果num是正数,字符串会有前导空白字符。CStr(num) 函数基本和Str(num)一样,除了它在num是正数时不会有前导空白字符。

其它类型转换成数值类型

很多静态类型编程语言,不允许将非数值类型转换成数值类型,一些脚本语言为了简化复杂度,允许非数值类型按照特定规则转换成数值类型。

  • JS
    • Undefined类型 --> NaN.
    • Null类型 --> 0.
    • Boolean类型 true --> 1, false --> 0.
    • String类型根据是十进制还是十六进制或者浮点数,转换成对应数值。注意,这里没有八进制数值,字符串"012"转换成数值是十进制的12,而不是八进制的012.
      如果是空字符串或者多个空格,数值是0,如果是除了如上的其他字符串,即是非法数值,转换结果是NaN.
    • Object类型转换为数值经过2个步骤,先调用valueOf()函数,按照如上规则,有合法数值即返回,如果返回NaN, 继续调用toString()函数,同样按照如上规则得到数值,如果没有数值类型返回,返回NaN.
  • C#
    • 基本类型提供隐式转换或者强制转换。
    • 字符串转换成基本类型:
      • <Type>.Parse(<String>)
        例如int.Parse("123")
      • <Type>.TryParse(<String>, out <Val>) (C# 2.0 ?)
        和Parse的区别是,此函数转换失败不会抛出异常。
    • 字符串转换成基本类型:
      • System.Convert.ToXXX(<String>)
        例如ToInt, ToFloat, ...
  • VB
    • Val(str) 将str转换成数值,如果str包含不能转换为数值的字符,转换就此终止,返回已解析的数值。例如:
      Val("a12") 返回 0,Val("-123ab") 返回 -123.

转换成数值的API

  • JS
    Number函数用于将任何类型转换成数值。
    parseInt函数和parseFloat函数都可以将字符串转换为数值。要特别注意,传入字符串和数值类型将导致结果不同,数值类型的参数会先转换为字符串再参与转换。例如parseInt(0x10, 16)和parseInt('0x10', 16)结果分别是22和16.

为什么有的编程语言允许字符串和整数相加?

C#/Java语言为了方便字符串拼接,字符串和其他类型执行加法,其它类型会隐式自动转换成字符串,最后是拼接的结果。这极大方便了字符串操作,但这并不是编程语言的通用设计。

  • Swift希望类型安全,不允许字符串和数字相加,必须都是字符串才可以相加。为减少因此设计带来的不便,它又提供字符串插值方法,可在字符串中插入其它类型变量,会自动转换成字符串。
    let a = 4
    let s = "number: \(a)"
    利用字符串里面的反斜杠\和括号()的组合,即可插入变量a到字符串中。

字符串拼接

大部分更高级编程语言支持用+做两个字符串拼接/连接,例如Java/C#/Python/JS/Ruby/Swift/Kotlin/Go.

  • C/ObjC/C++把字符串当做数值类型的指针,不允许两个指针相加。
    • 但如果是字符串和整数相加,等同于指针加法。
      • 例如”hello” + 1是字符串”ello”.
  • Java/C#均支持字符串相加,包括字符串 + <其他类型>(其他类型自动转换成字符串)。
  • Python支持两个字符串相加,也支持复合赋值运算符+=做字符串拼接,但不允许字符串和整数相加。
  • PHP和Perl利用.和.=实现字符串拼接,不能使用+连接字符串。
  • Rust有所有权机制,字符串拼接需做转换。
    let s1 = "Hello, ".to_string();
    let s2 = "world!".to_string();
    let s3 = s1 + &s2;
  • 仓颉 支持两个字符串相加,但不允许字符串和其他类型相加。如需要,其他类型必须调用toString转换成字符串。另外,也支持复合赋值 += 作用于字符串。
  • VB 有两种运算符方式拼接字符串。
    • & 拼接字符串或非字符串,注意,& 同时也是长整型类型符,当做字符串拼接需要和运算数有空格。
    • + 运算符:如两个运算数都是数值,表示数值相加;一个是数值另一个是数值字符串,一样是数值加法;两个都是字符串,做字符串拼接;其他情况,报错。
  • Python 也支持两个字符串相加。

字符串字面量自动连接

  • C/ObjC/C++ 支持多个字符串字面量自动连接,例如:
    "hello " "world"代表"hello world".
    • C# 等语言不支持。


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

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

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

相关文章

Android SDK 国内镜像及配置方法(2025最新,包好使!)

2025最新android sdk下载配置 1、首先你需要有android sdk manager2、 直接上教程修改hosts文件配置域名映射即可(不用FQ)2.1 获取ping dl.google.com域名ip地址2.2 配置hosts文件域名映射2.3 可以随意下载你需要的sdk3、 总结:走过弯路,踩过坑!!!大家就不要踩了!避坑1…

MySQL事务隔离机制与并发控制策略

MySQL事务隔离机制与并发控制策略 MySQL事务隔离机制与并发控制策略一、数据库并发问题全景解析二、事务隔离级别深度解析三、MySQL并发控制核心技术1. 多版本并发控制&#xff08;MVCC&#xff09;2. 锁机制 四、隔离级别实现差异对比五、生产环境最佳实践六、高级优化技巧七、…

Python `zip()` 函数是什么

Python zip() 函数是什么 在 Python 里,zip() 是一个内置函数,其主要作用是将多个可迭代对象(像列表、元组、字符串等)中的元素一一对应地组合成元组,最终返回一个迭代器,这个迭代器会生成这些元组。 基本语法 zip(*iterables)其中,*iterables 代表可变数量的可迭代对…

Jenkins 改完端口号启动不起来了

让我们将 Jenkins 恢复到默认的 8080 端口&#xff0c;确保它能正常启动&#xff1a; 1. 修改 Jenkins 的配置文件&#xff1a; sudo nano /etc/default/jenkins 将内容修改为&#xff1a; HTTP_PORT8080 JENKINS_ARGS"--webroot/var/cache/jenkins/war --httpPort8080…

【AWS+Wordpress-准备阶段】AWS注册+创建EC2实例

前言 自学笔记&#xff0c;解决问题为主&#xff0c;亲测有效&#xff0c;欢迎补充。 本地WP文件部署到AWS整体步骤如下&#xff1a;&#xff08;本文重点&#xff1a;AWS准备完成&#xff09; 0. [AWS 准备] 注册 AWS 并创建 EC2 实例 ↓ 1. [生成安装包&#xff1a;用 Du…

使用pytorch保存和加载预训练的模型方法

需要使用到的函数 在 PyTorch 中&#xff0c;torch.save() 和 torch.load() 是用于保存和加载模型的核心函数。 torch.save() 函数 主要用途&#xff1a;将模型或模型的状态字典&#xff08;state_dict&#xff09;保存到文件中。 语法&#xff1a; torch.save(obj, f, pi…

Python从入门到高手8.3节-元组的常用操作方法

目录 11.3.1 元组的常用操作方法 11.3.2 元组的查找 11.3.3 祈祷明天不再打雷下雨 11.3.1 元组的常用操作方法 元组类型是一种抽象数据类型&#xff0c;抽象数据类型定义了数据类型的操作方法&#xff0c;在本节的内容中&#xff0c;着重介绍元组类型的操作方法。 ​ 元组是…

图书推荐(协同过滤)算法的实现:基于订单购买实现相似用户的图书推荐

代码部分 package com.ruoyi.system.service.impl;import com.ruoyi.system.domain.Book; import com.ruoyi.system.domain.MyOrder; import com.ruoyi.system.mapper.BookMapper; import com.ruoyi.system.mapper.MyOrderMapper; import com.ruoyi.system.service.IBookRecom…

JMeter快速指南:命令行生成HTML测试报告(附样例命令解析)

一、核心命令解析 jmeter -g Dash_CapacityTest_01_AllModules_1000.jtl -o report/ 参数 作用 示例文件说明 -g 指定.jtl结果文件路径 -o 指定报告输出目录 自动创建report文件夹 二、操作步骤&#xff08;Windows/Linux/Mac通用&#xff09; 进入JMe…

2025年渗透测试面试题总结-渗透岗位全职工作面试(附回答)(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 一、通用基础类问题 1. 自我介绍 2. 职业动机与规划 3. 加班/出差接受度 二、安全技术类问题 1. 漏…

使用DEEPSEEK快速修改QT创建的GUI

QT的GUI&#xff0c;本质上是使用XML进行描述的&#xff0c;在QT CREATOR的界面编辑处&#xff0c;按CTRL2 切换到代码视图&#xff0c;CTRL3切换到编辑器视图。 CTRL2 切换到代码视图 CTRL3 切换到编辑器视图 鼠标左键点击代码视图中&#xff0c;按CTRLA → CTRLC复制XML代码…

draw.io流程图使用笔记

文章目录 图形较少的问题安装版好还是非安装版好业务系统嵌入的draw.io如何导入呢?如何判断组合和取消组合如何快速选中框里面的内容有时候选不到文本怎么办连接线如何不走直角 航点和取消航点支持多少种图形多个连接点?多个图形对齐双向箭头如何画图形的大小 其他流程图图标…

音频相关基础知识

主要参考&#xff1a; 音频基本概念_音频和音调的关系-CSDN博客 音频相关基础知识&#xff08;采样率、位深度、通道数、PCM、AAC&#xff09;_音频2通道和8ch的区别-CSDN博客 概述 声音的本质 声音的本质是波在介质中的传播现象&#xff0c;声波的本质是一种波&#xff0c;是一…

MySQL中隔离级别那点事

引言 在MySQL中&#xff0c;事务隔离级别和二进制日志&#xff08;binlog&#xff09;的格式密切相关&#xff0c;直接影响数据的一致性和复制的正确性。尤其是在“已提交读”&#xff08;Read Committed&#xff09;隔离级别下&#xff0c;由于没有使用间隙锁&#xff0c;某些…

LeetCode 热题 100 238. 除自身以外数组的乘积

LeetCode 热题 100 | 238. 除自身以外数组的乘积 大家好&#xff0c;今天我们来解决一道经典的算法问题——除自身以外数组的乘积。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求在不使用除法的情况下&#xff0c;计算数组中每个元素的乘积&#xff0c;其中每个元素的…

【网络编程】三、TCP网络套接字编程

文章目录 TCP通信流程Ⅰ. 服务器日志类实现Ⅱ. TCP服务端1、服务器创建流程2、创建套接字 -- socket3、绑定服务器 -- bind&#x1f38f;4、服务器监听 -- listen&#x1f38f;5、获取客户端连接请求 -- acceptaccept函数返回的套接字描述符是什么&#xff0c;不是已经有一个了…

STM32的SysTick

SysTick介绍 定义&#xff1a;Systick&#xff0c;即滴答定时器&#xff0c;是内核中的一个特殊定时器&#xff0c;用于提供系统级的定时服务。该定时器是一个24位的递减计数器&#xff0c;具有自动重载值寄存器的功能。当计数器到达自动重载值时&#xff0c;它会自动重新加载…

【Java项目脚手架系列】第一篇:Maven基础项目脚手架

【Java项目脚手架系列】第一篇:Maven基础项目脚手架 前言 在Java开发中,一个好的项目脚手架可以大大提高开发效率,减少重复工作。本系列文章将介绍各种常用的Java项目脚手架,帮助开发者快速搭建项目。今天,我们先从最基础的Maven项目脚手架开始。 什么是项目脚手架? …

Kafka的消息保留策略是怎样的? (基于时间log.retention.hours或大小log.retention.bytes,可配置删除或压缩策略)

Kafka 消息保留策略详解 1. 核心保留机制 # Broker 基础配置示例&#xff08;server.properties&#xff09; log.retention.hours168 # 默认7天保留时间 log.retention.bytes1073741824 # 1GB 大小限制2. 策略类型对比 策略类型配置参数执行逻辑适用场景时间删除log.re…

五一の自言自语 2025/5/5

今天开学了&#xff0c;感觉还没玩够。 假期做了很多事&#xff0c;弄了好几天的路由器、监控、录像机&#xff0c;然后不停的出现问题&#xff0c;然后问ai&#xff0c;然后解决问题。这次假期的实践&#xff0c;更像是计算机网络的实验&#xff0c;把那些交换机&#xff0c;…