在Swift中是否存在容量大于u_long/UInt64的数字类型?

iel*_*ani 4 swift

在Swift中是否存在比u_longUInt64更大容量的类型?

我有一个函数,需要非常大的整数来识别28位数的信用卡号码:

func myFunc(number : /*What to put here?*/) {
    //body
}
Run Code Online (Sandbox Code Playgroud)

什么类型合适?应该将数字视为字符串吗?

use*_*740 14

信用卡号码不是有意义的数学意义上的数字.它是一个数字序列,CC应该被视为文本,很像电话号码.使用固定长度整数值的一个直接问题是代码不能同时检测 "不再存在数字"的前导零和尾随零.

使用字符串或表示CC编号的特定(自定义)类型,可能在内部使用字符串.数字的长度(以10为基数)通常是数字的位数:这是基础字符串的长度.

如果需要(和何时),CC编号(由真实字符串表示)稍后可以编码为适当的二进制表示.


Bry*_*hen 5

您可以实现自己的UInt128类型。或使用NSDecimalNumber

实施 UInt128

struct UInt128 {
    var low : UInt64 = 0;
    var high : UInt64 = 0;
}
Run Code Online (Sandbox Code Playgroud)

你可以实现运营商

infix func + (l: UInt128, r: UInt128) -> UInt128 {
    // do your work... care with overflow 
}
Run Code Online (Sandbox Code Playgroud)