iOS Obj-C 等价于 JavaScript 的 toString(16)

Posted

技术标签:

【中文标题】iOS Obj-C 等价于 JavaScript 的 toString(16)【英文标题】:iOS Obj-C Equivalent to JavaScript's toString(16) 【发布时间】:2014-09-16 09:19:45 【问题描述】:

我正在尝试从一个随机数生成一个十六进制 id 字符串。在 javascript 中我会这样做:

var id = ( Math.random() * Math.pow(10, 17) + Math.random() * Math.pow(10, 17) + Math.random() * Math.pow(10, 17) + Math.random() * Math.pow(10, 17) ).toString(16);

结果是一个随机 id,例如:“2d50e9b4835d7e0”。

有没有人知道 ios 中有一种类似的方法可以用来做同样的事情?我希望 iOS 调用的结果返回一个相同长度(15 个字符)的字符串。

【问题讨论】:

【参考方案1】:

您可以使用以下代码在 Objective C 中获取随机数

-(int)getRandomNumberBetween:(int)from to:(int)to 

    return (int)from + arc4random() % (to-from+1);

编辑我已更改此方法以获取十六进制字符串

- (NSString *)getHexString
   
    NSString *longlongstr = [NSString stringWithFormat:@"%d%d%d%d%d%d",[self getRandomNumberBetween:100 to:999],[self getRandomNumberBetween:100 to:999],[self getRandomNumberBetween:100 to:999],[self getRandomNumberBetween:100 to:999],[self getRandomNumberBetween:100 to:999],[self getRandomNumberBetween:100 to:999]];
    long long longnumber = [longlongstr longLongValue];
    NSString *hexStr =  [NSString stringWithFormat:@"%llx",longnumber];
    NSLog(@"%@",hexStr);
     return hexStr;


所以你的代码看起来像

NSString *hexStr = [self getHexString];

您可以根据需要对其进行修改,它会为您提供 15 位十六进制值

【讨论】:

这个输出似乎没有生成任何带有字母的东西,只是一个表示为字符串的数字。这是运行后的一个示例:@“31333832”。 对不起,我修改了我的答案,请检查并让我知道它是否有效 嗯,这肯定会增加一些字母字符,但不会很多,而且生成的每个数字似乎也以几个零结尾。【参考方案2】:

我找到了解决办法:

#define cPow pow(3, 19)

long long val = ((
    rand() * cPow +
    rand() * cPow +
    rand() * cPow +
    rand() * cPow
));

NSString *newId = [[NSString alloc] initWithFormat:@"%llx", val];

【讨论】:

以上是关于iOS Obj-C 等价于 JavaScript 的 toString(16)的主要内容,如果未能解决你的问题,请参考以下文章

WebViewJavascriptBridge-Obj-C和JavaScript互通消息的桥梁

等价于 JavaScript 中的 continue 语句

javascript 等价于 php unpack() 函数

JavaScript 等价于 ?? C#中的运算符[重复]

Javascript 等价于 python 的 .format()

是否有一个 JavaScript 等价于 Python pass 语句,它啥都不做?