随机字母数字字符串 Linux Swift 3

2023-12-15

当尝试使用 Swift 3 在 Linux 中生成随机字符串时,我遇到了 2 个问题。

  1. arc4random_uniform 仅在 BSD 上的 Linux 中不可用。所以我能够使用 random() 函数。当我生成可变大小的随机数时,这有效(参见下面的代码)

    func generateRandomNumber() -> Int
    {
       var place = 1
    
       var finalNumber = 0;
    
    #if os(Linux)
    for _ in 0..<5
    {
        place *= 10
    
        let randomNumber = Int(random() % 10) + 1
    
        finalNumber += randomNumber * place
    }
    #else
    for _ in 0..<5
    {
        place *= 10
    
        let randomNumber = Int(arc4random_uniform(10))
    
        finalNumber += randomNumber * place
    }
    #endif
    
      return finalNumber
    }
    

那行得通。Edit:它有效,但每次都给我相同的数字:(

  1. 当尝试生成随机字母数字字符串时,我仅限于使用 Swift String 而不是 NSSTRING。 Linux 抛出这个错误

原始的预 Linux 代码块:

   func randomString(_ length: Int) -> String
   {

      let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
      let len = UInt32(letters.length)

      var randomString = ""

      for _ in 0 ..< length {
    let rand = arc4random_uniform(len)
    var nextChar = letters.character(at: Int(rand))
    randomString += NSString(characters: &nextChar, length: 1) as String
      }

       return randomString
    }

使用上面的代码时我得到的实际错误

    error: cannot convert value of type 'NSString' to type 'String' in coercion
        randomString += NSString(characters: &nextChar, length: 1) as String

针对linux代码块进行了修改。

    func randomString(_ length: Int) -> String
    {

let letters : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let len = letters.characters.count

var randomString = ""

#if os(Linux)

    for _ in 0..<length
    {
        let randomValue = (random() % len) + 1

        randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(randomValue))])"
    }

    #else
    for _ in 0 ..< length
    {
        let rand = arc4random_uniform(UInt32(len))

        randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(rand))])"
    }
    #endif


      return randomString
}          

但这一次的错误很奇怪,它只说非法指令没有额外的信息。我以交互模式运行 docker 容器,我看到我的服务器在调用其他函数等时运行并打印出来。

但问题是,当我在 IBM 的 swift 中运行该函数时,该函数实际上可以工作 沙箱

enter image description here and I'm assuming its using linux also. Im very stuck and confused any help would be greatly appreciated.

(UPDATE):我在 Linux 环境中使用单个 swift 文件运行了相同的函数,而不是 Vapor swift Web 框架。它有效。正如我在上面的编辑中提到的,它每次都会给我相同的随机字符串。构建完成后,我仍然需要测试整个项目。但除此之外,我需要知道 random() 函数是否真的每次都会给我一些新的东西,而不是同样的垃圾。


弄清楚了。

因此,重复随机数/字符串的答案是在调用 random() 函数之前添加这一行

srand(UInt32(time(nil)))

我想这也是修复非法指令的原因。因为我不记得改变过任何其他东西。

不用说,这是我的最终结果

 func generateRandomNumber() -> Int
 {
    var place = 1

    var finalNumber = 0;

    #if os(Linux)

    srand(UInt32(time(nil)))

    for _ in 0..<5
    {
        place *= 10

        let randomNumber = Int(random() % 10) + 1

        finalNumber += randomNumber * place
    }
    #else
    for _ in 0..<5
    {
        place *= 10

        let randomNumber = Int(arc4random_uniform(10))

        finalNumber += randomNumber * place
    }
    #endif

     return finalNumber
 }



 func randomString(_ length: Int) -> String
 {

    let letters : String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    let len = letters.characters.count

    var randomString = ""

    #if os(Linux)

    srand(UInt32(time(nil)))

   for _ in 0..<length
   {
     let randomValue = (random() % len) + 1

     randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(randomValue))])"
   }

   #else
  for _ in 0 ..< length
  {
     let rand = arc4random_uniform(UInt32(len))

     randomString += "\(letters[letters.index(letters.startIndex, offsetBy: Int(rand))])"
  }
  #endif

   return randomString
 }  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随机字母数字字符串 Linux Swift 3 的相关文章

随机推荐

  • 使用 df 命令仅显示 %used

    我发现了一些其他解决方案 例如 df Ph oracle archive awk NR 2 print 5 tr d 但它们似乎有点太多了 我认为存在更优雅的东西 因为我将直接传递到subprocess check output in py
  • IBM MQ XMS 消息侦听器仅获取队列中已有的消息,而不是新消息

    我有 IBM MQ XMS 的发送者和接收者控制台应用程序 发送方填充队列 接收方使用 receive 方法使队列管理器出列 我使用带有 bool 值的 while 循环来继续运行接收器 以便每当队列中存在新消息时接收器都可以获取该数据 现
  • 如何使用 pywin32 和 WMI 设置进程优先级?

    from win32com client import GetObject for proc in GetObject WinMgmts impersonationLevel impersonate IncreaseBasePriority
  • 从 PHP 访问 apache errordocument 指令

    如果不满足某些条件 我想制作一个像真正的 404 页面一样的 php 脚本输出 如 Apache ErrorDocument 指令中设置 我不确定如何 是否可以从 PHP 访问该值 if SESSION value header SERVE
  • Xcode iPhone 中的搜索栏

    我需要在 Xcode Iphone 中使用 SearchBar 的帮助 我在表格视图中有一个联系人列表 我上面有一个搜索栏 我显示联系人列表 我需要实现搜索以从联系人列表中过滤联系人 任何帮助都会对我很有用 提前致谢 查看分步教程here
  • 使用 React 组件登录 Firebase

    基本思想是在 React 中创建 Firebase 登录 这些组件会自行渲染 但它们不能一起工作 主要问题是 在调用 onAuthStateChanged 方法后 渲染函数不会采用 new 状态 我究竟做错了什么 非常感谢你们 var Lo
  • 从多维 Numpy 数组行中选择随机窗口

    我有一个大数组 其中每一行都是一个时间序列 因此需要保持顺序 我想为每行选择一个给定大小的随机窗口 Example gt gt gt import numpy as np gt gt gt arr np array range 42 res
  • 无法在 DevOps 步骤中设置 powershell 输出变量

    我正在尝试使用 powershell 脚本中的输出变量 我使用经典 UI 在线使用 Devops 并在发布管道中尝试了 powershell 4 和 Powershell 5 任务 我正在使用一个自托管代理 它可以正常工作并执行许多其他构建
  • mysql - 优化连接表列上的 ORDER BY COALESCE

    编辑 按请求添加完整查询 本质上 我有一个帖子表 一对多地链接到转发表 类似于 Twitter 我想加载按重新发布时间 如果存在 或原始帖子时间排序的帖子 然而 使用单个查询的排序过程非常慢 可能是因为 COALESCE x y 没有充分利
  • 如何对每组进行平均和计数以及创建新表

    我有一个Dataset 我想计算每个分数组 1 10 中KPI CPM和CPC列以及计数次数列的平均值 如何根据结果创建新表 新表如下所示 score avg KPI avg CPC avg CPM count times 10 9 8 7
  • 有没有办法从数据窗口中隐藏特定的指标值?

    我最近创建了一个脚本 可以在 TradingView 的图表上绘制几个不同的指标 在特定场景下 部分指标不活跃 在数据窗口中显示 n a 我知道 TradingView 允许我们隐藏所有指标值 我想自定义哪些指标值可见 这可能吗 谢谢你的时
  • 不使用 runif() 的随机统一数

    通常为了生成均匀随机数序列 我在 R 中使用 runif 命令 runif 10 0 10 1 5 032995 8 712604 4 400579 3 874882 2 401324 2 465861 2 59525 8 570266 2
  • 如何在 python 中递归生成目录大小,例如 du 。做?

    可以说我的结构是这样的 am here one some dir two three has many leaves hello world 假设 one some dir 包含一个大文件 500mb 而 Three has many le
  • PostgreSQL“列不存在”但实际上存在

    我正在写一个Java应用程序自动构建和运行 SQL 查询 对于许多表 我的代码工作正常 但在某个表上 它会因抛出以下异常而卡住 Exception in thread main org postgresql util PSQLExcepti
  • 使用批处理脚本将行从 .csv 文件复制到另一个 .csv 文件中

    我正在从设备 输出 创建 csv 文件 并且需要将此文件中的特定行数复制到另一个具有相同格式的 csv 文件中 幸运的是 它们的格式相同 因此每个文件都有相同的行可供复制 第 68 行到 107 行 我已经使用其他来源的代码尝试过此操作 但
  • R数据帧按组排名(按排名分组),带有包 dplyr

    我有一个数据框 测试 如下所示 session id seller feedback score 1 1 282470 2 1 275258 3 1 275258 4 1 275258 5 1 37831 6 1 282470 7 1 26
  • 收到“外部表不是预期的格式。”尝试在 SSIS 中导入 Excel 文件时出错

    我正在尝试导入 Excel 文件 xls 通过 SSIS 传输到 SQL Server 中的表 但 SSIS 似乎无法将该文件识别为有效的 Excel 文件 我收到以下错误 Error 1 Excel 源 86 错误 SSIS错误代码 DT
  • 通用构建枚举的一些错误

    Solved对于第一个宏来说 编写这并不是最容易的 但我学到了很多东西 感谢 Gama11 为我指明了正确的方向 以及创造如此美丽事物的核心团队 Haxe And I even added some slick doc field stri
  • 比较方法抛出异常:比较方法违反了其一般契约[重复]

    这个问题在这里已经有答案了 可能的重复 为什么我的比较方法会抛出异常 比较方法违反了它的一般契约 我有这个代码 class TimeComparatorTipo0 implements Comparator Override public
  • 随机字母数字字符串 Linux Swift 3

    当尝试使用 Swift 3 在 Linux 中生成随机字符串时 我遇到了 2 个问题 arc4random uniform 仅在 BSD 上的 Linux 中不可用 所以我能够使用 random 函数 当我生成可变大小的随机数时 这有效 参