我能够将其转换[]byte
为无符号整数:
a := binary.LittleEndian.Uint16(sampleA)
b := binary.BigEndian.Uint32(sampleB)
这利用了Go包https://golang.org/src/encoding/binary/binary.go中的BigEndian和LittleEndian类型。
这提供了,Uint16()
但是没有等效项Int16()
或Float32()
有什么想法为什么不呢?另外,应该怎么做呢?
将数字类型转换为一系列字节([]byte
),反之亦然,这与字节序有关。您如何解释结果完全取决于您。
您所需要做的就是汇编一个16位,32位或64位值,完成后,您可以根据需要解释结果。
例如,如果您已经有一个uint16
值(将其用作带符号的值),那么您所需要做的就是类型转换,因为uint16
and
的内存布局int16
是相同的(从uint16
to 转换int16
不会只改变类型的内存表示形式):
a := binary.LittleEndian.Uint16(sampleA)
// If you need int16:
a2 := int16(a)
类似地:
a := binary.LittleEndian.Uint64(sampleA)
// If you need int64:
a2 := int64(a)
使用uint-> float转换的情况要复杂一些,因为使用简单的类型转换将尝试转换数值,而不仅仅是更改类型(因此将更改内存表示形式)。
用于将无符号整数,以浮动的类型,则可以使用的功能math
包,即math.Float32frombits()
和math.Float64frombits()
,并且对于具有相同的内存布局的反方向(一个浮点值转换为无符号整数):math.Float32bits()
和math.Float64bits()
。
例如:
a := binary.LittleEndian.Uint64(sampleA)
// If you need a float64:
a2 := math.Float64frombits(a)
如果您从math
软件包中研究这些功能的实现,则可以看到没有使用内存值/布局,而是通过使用unsafe
软件包将其“查看”为不同的类型。例如:
func Float32frombits(b uint32) float32 { return *(*float32)(unsafe.Pointer(&b)) }
正如保罗所说,binary
包提供Read()
,并Write()
因此你不需要的功能做的引擎盖下这些转换。
使用相同的“ pi”示例进行展示(来自的文档binary.Read()
):
b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}
// USING binary.Read()
var pi float64
buf := bytes.NewReader(b)
err := binary.Read(buf, binary.LittleEndian, &pi)
if err != nil {
fmt.Println("binary.Read failed:", err)
}
fmt.Println(pi)
// Using LittleEndian.Uint64() and math.Float64frombits()
a := binary.LittleEndian.Uint64(b)
a2 := math.Float64frombits(a)
fmt.Println(a2)
输出(在Go Playground上尝试):
3.141592653589793
3.141592653589793
问题内容: 所有, 我一直在网上练习编码问题。目前,我正在研究问题陈述“ 问题”,我们需要在其中转换大尾数<->小尾数。但是考虑到给出的示例,我无法记下步骤: 我正在考虑的逻辑是: 1>获取整数值(由于我在Windows x86上,输入为Little Endian) 2>生成相同的十六进制表示形式。 3>反转表示并生成大端整数 但是我显然在这里缺少一些东西。 谁能指导我。我正在用Java 1.5编
我目前正在开发一个C#web API。对于特定的调用,我需要使用对API的ajax调用发送2个图像,以便API可以将它们保存为数据库中的varbinary(max)。 null
问题内容: 无法将image.image转换为[] byte。问题点用虚线包裹。 基本上,我需要new_image为[] byte格式,以便可以将其发送到我的S3存储桶。 谢谢您的帮助。 问题答案: 您需要一个byte.Buffer,而不是bufio.Writer。bytes.Buffer在需要写入器的写入器时使用。bufio.Writer只是在将数据转发到另一个写入器之前将其缓存在内存中。
问题内容: 我有一个表示RGB图像的整数数组,想将其转换为字节数组并将其保存到文件中。 在Java中将整数数组转换为字节数组的最佳方法是什么? 问题答案: 正如Brian所说,您需要确定需要什么样的转换。 您是否要将其保存为“正常”图像文件(jpg,png等)? 如果是这样,您可能应该使用Java Image I / O API。 如果要以“原始”格式保存,则必须指定写入字节的顺序,然后使用和NI
问题内容: 我有一个byte.Buffer,我使用binary.Write()函数包装了数据。然后,我需要将此字节数组发送到C函数。使用Go 1.6时,我未能成功解决这一问题。 它在调用C函数的行上失败: C函数: 我能够使以下内容正常工作,但将字节数组转换为字符串感觉不对。有一个更好的方法吗?这种方法是否会对数据产生副作用? 同样,这需要在Go 1.6(引入了更严格的cgo指针规则)下工作。 谢
问题内容: 我将类型为DataTable的对象保存到SQL 2005数据库中的类型为varbinary的字段中。我想找回它,但无法键入强制转换。这就是我保存它的方式。 “ dt”是DataTable对象实例。 问题答案: 您在说的是二进制序列化和反序列化。也许这会有所帮助。