iOS Obj-C等效于JavaScript's到字符串(16)

iOS Obj-C Equivalent to JavaScript's toString(16)

本文关键字:字符串 Obj-C JavaScript iOS      更新时间:2023-09-26

我正在尝试从一个随机数生成一个十六进制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个字符)的字符串。

您可以使用以下代码在目标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位十六进制值

我找到了一个解决方案:

#define cPow pow(3, 19)
long long val = ((
    rand() * cPow +
    rand() * cPow +
    rand() * cPow +
    rand() * cPow
));
NSString *newId = [[NSString alloc] initWithFormat:@"%llx", val];