• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[日常]Go语言圣经--复合数据类型,数组习题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

go语言圣经-复合数据类型

1.以不同的方式组合基本类型可以构造出来的复合数据类型

2.四种类型——数组、slicemap和结构体

3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结构体则是由异构的元素组成的

4.slicemap则是动态的数据结构,它们将根据需要动态增长

 

go语言圣经-数组

1.因为数组的长度是固定的,因此在Go语言中很少直接使用数组

2.数组字面值语法用一组值来初始化数组

3.数组的长度是数组类型的一个组成部分

4.Printf函数的%x副词参数,它用于指定以十六进制的格式打印数组或slice全部的元素,%t副词参数是用于打印布尔型数据,%T副词参数是用于显示一个值对应的数据类型

5.函数传参可以显式地传入一个数组指针,那样的话函数通过指针对数组的任何修改都可以直接反馈到调用者

练习 4.1: 编写一个函数,计算两个SHA256哈希码中不同bit的数目。(参考2.6.2节的PopCount函数。)

 

练习 4.2: 编写一个程序,默认情况下打印标准输入的SHA256编码,并支持通过命令行flag定制,输出SHA384SHA512哈希算法。

 

1. 查看下文档 godoc crypto/sha256

func Sum256(data []byte) [Size]byte

2. godoc crypto

package main
import(
        "fmt"
        "crypto/sha256"
        "crypto/sha512"
        "flag"
        "strings"
)

//命令行标志
var hashMethod=flag.String("s","sha256","请输入哈希算法")
func main(){
        flag.Parse()
        num := compareSha256("x","X")
        fmt.Println(num)

        //接收命令行flag,进行判断
        printHash(strings.ToUpper(*hashMethod),"x")
}
/*
练习 4.1: 编写一个函数,计算两个SHA256哈希码中不同bit的数目。(参考2.6.2节的PopCount函数。)
*/
func compareSha256(str1 string,str2 string)int{
        a := sha256.Sum256([]byte(str1))
        b := sha256.Sum256([]byte(str2))
        num := 0
        //循环字节数组
        for i:=0;i<len(a);i++{
                        //1个字节8个bit,移位运算,获取每个bit
                        for m:=1;m<=8;m++{
                                //比较每个bit是否相同
                                if (a[i] >> uint(m))!=(b[i] >>uint(m)){
                                        num++
                                }   
                        }   
        }   
        return num 
}
/*
练习 4.2: 编写一个程序,默认情况下打印标准输入的SHA256编码,并支持通过命令行flag定制,输出SHA384或SHA512哈希算法。
*/
func printHash(flag string,str string){
        if flag=="SHA256"{
                fmt.Printf("%x\n",sha256.Sum256([]byte(str)))
                return
        }   
        if flag=="SHA512"{
                fmt.Printf("%x\n",sha512.Sum512([]byte(str)))
                return
        }   
        if flag=="SHA384"{
                fmt.Printf("%x\n",sha512.Sum384([]byte(str)))
                return
        }

}
  

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
GO基础发布时间:2022-07-10
下一篇:
后端渲染实践——看掘金社区是如何实践的 谢孟军:The State o ...发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap