在 Int 中快速转换 Char

Posted

技术标签:

【中文标题】在 Int 中快速转换 Char【英文标题】:Convert Char in Int swift 【发布时间】:2019-07-29 09:42:46 【问题描述】:

我正在尝试将 char 转换为 int,在 C 中它可以工作,但在 Swift 中我遇到了一些问题。在C里就不一样了,用ascii没问题。

这个函数是我的 atoi 函数的一部分。

我尝试使用 binaryInt 和 UnicodeScalar,但没有成功

func scanNumber(_ strArray: [Character], _ index: Int, _ flag: Int) -> Int 

    var resalt = 0

    while ((strArray[index] >= "0") && (strArray[index] <= "9")) 
        // flag mean plus or minus sign in strArray, if flag = 2 it's like a ["-", "1", "2", "3"]
        if flag != 2 
            resalt *= 10
            resalt = resalt + Int(strArray[index]) //error
         else 
            resalt *= 10
            resalt = resalt - Int(strArray[index]) //error
        
    
    return resalt

Int(strArray[index]) 返回:

Initializer 'init(_:)' 要求 'Character' 符合 'BinaryInteger'

【问题讨论】:

您可以使用asciiValue 属性:Int(strArray[index].asciiValue ?? 0) 【参考方案1】:

这是一个使用 asciiValue 的解决方案

func scanNumber(_ strArray: [Character], _ index: Int, _ flag: Int) -> Int 

    var resalt = 0
    var arrayIndex = index

    while (arrayIndex < strArray.count && (strArray[arrayIndex] >= "0") && (strArray[arrayIndex] <= "9")) 
        guard let ascii = strArray[arrayIndex].asciiValue  else 
           return resalt
        
        resalt *= 10

        if flag != 2 
            resalt += Int(ascii) - 48
         else 
            resalt -= Int(ascii) - 48

        
        arrayIndex += 1
    
    return resalt

我也修复了循环

【讨论】:

谢谢! Int(ascii) - 48 我喜欢 :) 为什么我们必须考虑到这个 arrayIndex &lt; strArray.count?我认为一旦数组超出 0 和 9 的范围,循环就会被中断。 @Buz-pro 如果数组包含 only 数字(或以数字结尾),则 while 中的检查将超出范围。【参考方案2】:

使用字符可以创建字符串。并且使用 String 你可以创建一个 Int。

let char: Character = "1" if let number = Int(String(char)) // use number

【讨论】:

以上是关于在 Int 中快速转换 Char的主要内容,如果未能解决你的问题,请参考以下文章

char *怎样转成int

C语言中 怎样把一个int转换成char

arduino int强制转换char

C语言 int转char

错误:在 [-Wnarrowing] 中缩小从“int”到“char”的“199”转换

Java中三元运算符中的char转换,打印int值而不是char值