golang 将字符串转换为字节

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 将字符串转换为字节相关的知识,希望对你有一定的参考价值。

package main
//turn a string to byte arr
import "fmt"


func main() {
    fmt.Print(strtobyte("abcdefghijklmnopqrstuvwxyz"))
    /*[97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122] */
}

func strtobyte(input string) []byte{
    return []byte(input)
}

将字节数组转换为 Golang 中的 syscall.InotifyEvent 结构

【中文标题】将字节数组转换为 Golang 中的 syscall.InotifyEvent 结构【英文标题】:convert byte array into syscall.InotifyEvent struct in Golang 【发布时间】:2017-10-08 14:55:55 【问题描述】:

我正在使用 golang 的系统调用库中的 inotify 功能。我可以使用InotifyInit 设置inotify 功能,使用InotifyAddWatch 添加要监视的文件,并使用Read 功能检测文件更改。我遇到的问题是 Read 函数仅读取到包含有关 inotify 事件信息的字节数组。我想将该字节数组转换/转换为 InotifyEvent 结构,以便我可以正确访问有关 inotify 事件的信息

以下是我目前所拥有的:

package main

import (
    "fmt"
    "syscall"
)

func main() 
    buff := make([]byte, 64)
    inotefd, err := syscall.InotifyInit()
    if err != nil 
        fmt.Println(err)
    
    _, err = syscall.InotifyAddWatch(inotefd, "/home/me/foo", syscall.IN_MODIFY)
    if err != nil 
        fmt.Println(err)
    

    for 
        n, err := syscall.Read(inotefd, buff)
        if err != nil 
            fmt.Println(err)
            return
        

        if n < 0 
            fmt.Println("Read Error")
            return
        

        fmt.Printf("Buffer: %v\n", buff)
        //can't cast []buff into InotifyEvent struct
        fmt.Printf("Cookie: %v\n", buff[0:4])
        fmt.Printf("Len: %v\n", buff[4:8])
        fmt.Printf("Mask: %v\n", buff[8:12])
        fmt.Printf("Name: %v\n", buff[12:13])
        fmt.Printf("Wd: %v\n", buff[13:17])
    

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您可以为此使用unsafe 包:

    info := *((*syscall.InotifyEvent)(unsafe.Pointer(&buff[0])))

【讨论】:

以上是关于golang 将字符串转换为字节的主要内容,如果未能解决你的问题,请参考以下文章

golang 从文件中读取字节并将其转换为字符串

将任意 Golang 接口转换为字节数组

golang将字节数组转换为结构

将字节数组转换为 Golang 中的 syscall.InotifyEvent 结构

在Golang总和十六进制

golang 在go中将字节数组转换为int