首页 > 解决方案 > 如何基于第一个命令行参数实现 num2hex 函数

问题描述

实现了一个函数,该函数num2hex()接受一个无符号整数并将其十六进制等效值作为字符串返回。但是这里的函数应该有一个额外的参数-u来指定十六进制数字是小写(默认)还是大写。

例如:677输出2a5

例如:-u 107471输出1A3CF

我的代码:

package main

import (
    "fmt"
    "os"
    "strconv"
)

func main() {
    //p := 107471

    //h := fmt.Sprintf("%x", p)

    p := os.Args[1:]

    var err error
    nums := make([]int, len(p))
    for i := 0; i < len(p); i++ {
        if nums[i], err = strconv.Atoi(p[i]); err != nil {
            fmt.Println("Not a number")
        }
        num2hex(nums[i])
    }
}

func num2hex(m int) {
    fmt.Printf("%x", m)
}

标签: go

解决方案


我认为这可以满足您的要求:

package main

import (
   "flag"
   "fmt"
)

func main() {
   var upper bool
   flag.BoolVar(&upper, "u", false, "upper case")
   flag.Parse()
   for _, s := range flag.Args() {
      var n int
      fmt.Sscan(s, &n)
      if upper {
         fmt.Printf("%X\n", n)
      } else {
         fmt.Printf("%x\n", n)
      }
   }
}

https://golang.org/pkg/flag#BoolVar


推荐阅读