欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 如何快速获取字符串的UTF-8或UTF-16编码二进制数据?数值转换成字符串itoa不是C标准?其它类型转换成字符串?其它类型转换成数值类型?

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

2025/5/6 22:28:40 来源:https://blog.csdn.net/cxsjabcabc/article/details/147708887  浏览:    关键词:如何快速获取字符串的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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词