要求
写一个实现字符串转为整形的函数
以16进制方式解析
不能使用库函数
思路
1、输入字符串b 3、反转字符串,并赋给字符串数组A 2、循环zhi检测数组A,依次检测1每个字符 5、判断当前检测的字符,如果属于ABCDEF,则依次把ABCDEF 转换为11....16,否则不做任何操作 6、累加,当前循环次数的16次方乘以当前字符的数值大小。 7、输出总累加值就是10进制整数解决办法
使用库函数
func Str16ToInt(str string) (num int64) { //第二个参数base设置为0时,该函数会自动识别数字格式进行转换。以下是go语言源代码里面的注释: //If base == 0, the base is implied by the string's prefix: base 16 for "0x", base 8 for "0", and base 10 otherwise. //翻译一下:如果base为0,base的值会根据字符串s起始自动进行判断:如果字符串以0x开始,base=16;如果字符串以0开始base=8;以其他字符串开始base=10 num, err := strconv.ParseInt(str, 16, 32) if err != nil { fmt.Println(err) return 0 } return num }这个简单,使用strconv.ParseInt函数即可
自己写
func Str16ToIntMe(str string) (num float64) { var n uint8 //判断是否包含0x if strings.Index(str, "0x") == 0 { str = str[2:] } //获取到字符串长度 strLen := len([]rune(str)) for i := 0; i < strLen; i++ { if str[i] >= 'A' && str[i] <= 'F' { n = str[i] - 'A' + 10 } else if str[i] >= 'a' && str[i] <= 'f' { n = str[i] - 'a' + 10 } else { n = str[i] - '0' } num += math.Pow(16, float64(i)) * float64(n) } return num }总结
重点是思路,怎么去做,然后怎么获取abcdef转换,该乘以哪个数。
完整代码
代码
package main import ( "fmt" "math" "strconv" "strings" ) //写一个实现字符串转为整形的函数 //要求 以16进制方式解析 //不能使用库函数 func main() { str := "0xffff" fmt.Printf("使用strconv.ParseInt转换: %v\n", Str16ToInt(str)) fmt.Printf("使用自己写的函数转换: %v\n", Str16ToIntMe(str)) } func Str16ToInt(str string) (num int64) { //第二个参数base设置为0时,该函数会自动识别数字格式进行转换。以下是go语言源代码里面的注释: //If base == 0, the base is implied by the string's prefix: base 16 for "0x", base 8 for "0", and base 10 otherwise. //翻译一下:如果base为0,base的值会根据字符串s起始自动进行判断:如果字符串以0x开始,base=16;如果字符串以0开始base=8;以其他字符串开始base=10 num, err := strconv.ParseInt(str, 0, 32) if err != nil { fmt.Println(err) return 0 } return num } /** 5、判断当前检测的字符,如果属于ABCDEF,则依次把ABCDEF 转换为11....16,否则不做任何操作 6、累加,当前循环次数的16次方乘以当前字符的数值大小。 7、输出总累加值就是10进制整数 **/ func Str16ToIntMe(str string) (num float64) { var n uint8 //判断是否包含0x if strings.Index(str, "0x") == 0 { str = str[2:] } //获取到字符串长度 strLen := len([]rune(str)) for i := 0; i < strLen; i++ { if str[i] >= 'A' && str[i] <= 'F' { n = str[i] - 'A' + 10 } else if str[i] >= 'a' && str[i] <= 'f' { n = str[i] - 'a' + 10 } else { n = str[i] - '0' } num += math.Pow(16, float64(i)) * float64(n) } return num }输出
