如何快速獲取字符串的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.pswp.cn/news/904720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904720.shtml
英文地址,請注明出處:http://en.pswp.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;…