Swift中的二进制

Swift中的二进制,swift,binary,swift3,Swift,Binary,Swift3,我正在尝试用Swift转换二进制和其他东西,这是我的代码: let hexa = String(Int(a, radix: 2)!, radix: 16)// Converting binary to hexadecimal 我发现了错误 无法将“Int”的值类型转换为预期的参数类型“String” 你误解了整数的存储方式 没有“十进制”Int,“十六进制”Int等概念。当内存中有Int时,它总是二进制的(基数2)。它存储为64或32位的序列 当您尝试为Int分配一个类似10(十进制)、0xA

我正在尝试用Swift转换二进制和其他东西,这是我的代码:

let hexa = String(Int(a, radix: 2)!, radix: 16)// Converting binary to hexadecimal
我发现了错误

无法将“Int”的值类型转换为预期的参数类型“String”


你误解了整数的存储方式

没有“十进制”
Int
,“十六进制”
Int
等概念。当内存中有
Int
时,它总是二进制的(基数2)。它存储为64或32位的序列

当您尝试为
Int
分配一个类似
10
(十进制)、
0xA
(十六进制)、
0b1010
(二进制)的值时,编译器会进行必要的解析,以转换该
Int
的源代码字符串表示形式,转换为可存储在
Int
的64位或32位内存中的一系列位

当您尝试使用
Int
时,例如在
print(a)
中,会在后台进行转换,将
Int
在内存中的二进制表示形式转换为
字符串
,其符号表示基数10中的
Int
,使用我们习惯使用的符号(
0-9

更基本的是,它有助于理解基数的概念是一种纯粹为了方便我们处理数字而设计的结构。抽象地说,数字的大小是一个独立的实体,与任何基数都不耦合。震级可以用文本表示法和基数具体表示

这部分
Int(a,基数:2)
,没有意义。即使假设存在这样一个初始值设定项(
Int.init?(Int,基数:Int)
),它也不会做任何事情!。如果
a=5
,则
a
存储为二进制
0b101
。然后将其从二进制解析为Int,给您<代码>0b101,或与开始时相同的
5

另一方面,
Strings
可以有基数的概念,因为它们可以是十进制
Int
、十六进制
Int
等的文本表示。要从包含数字的
String
转换,可以使用。这里的关键是它需要一个
字符串
参数

let a = 10 //decimal 10 is stored as binary in memory 1010
let hexa = String(a, radix: 16) //the Int is converted to a string, 0xA

a
的声明是什么?如果
a
是一个
字符串
“10101011”
“a”是我创建的一个Int,则此代码有效。让a=10表示数字2,因为它从二进制变为十六进制