- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我能够将 []byte
转换为无符号整数:
a := binary.LittleEndian.Uint16(sampleA)
b := binary.BigEndian.Uint32(sampleB)
这利用了 Go 包中的 BigEndian 和 LittleEndian 类型 https://golang.org/src/encoding/binary/binary.go .
这提供了 Uint16()
但是没有等效的 Int16()
或 Float32()
。
为什么不呢?另外,这应该如何完成?
最佳答案
将数字类型转换为一系列字节 ([]byte
),反之亦然是关于 endianness 的。 .您如何解释结果完全取决于您。
您只需组装一个 16 位、32 位或 64 位值,完成后,您可以根据需要解释结果。
例如,如果您已经有一个 uint16
值,要将其用作有符号值,您只需要一个类型 conversion因为 uint16
和 int16
的内存布局相同(从 uint16
转换为 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)) }
正如 Paul 所提到的,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
关于将 []byte 转为 Little/Big-Endian 有符号整数或 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34701187/
我使用 POI4XPages api 从 Word 文档创建了 PDF。这是代码: var template = poiBean.buildResourceTemplateSource(null,"p
我如何转换它: SELECT max(id), value FROM GROUP BY value; 能言善辩吗? 提前致谢!! 最佳答案 这应该可行,您可以在 https://laravel.co
我有Jquery点击事件,并且我想在执行我的函数UpdateItemStatus(this.id);之前防止多次点击,所以我已尝试使用开/关事件的以下代码, $('#tableItems').on('
有谁知道有什么软件包支持以下将base58转换为十六进制字符串或从十六进制字符串转换为base58编码的相反方式。下面是一个 python 实现的示例。 https://www.reddit.com/
我正在使用 Rob Monies 的“Jquery Week Calendar”来构建日历应用程序。 我有一个 MSSQL 数据库,其中包含名为“dates”的表和以下字段: ID开始结尾标题 我想用
我有一个以下形式的字典 >>> {'1' : [V3210 , 234567 ,1235675 , 23], '2' : [v3214 , 5678 ,65879 ,89} , ...} 如何将字典写
我有一堆 one 形式的变量, two , three , four_five我想把它们转到getOne , getTwo , getThree , getFourFive ... 我写了一个公式来实
这是我的第一个问题,我是初学者,代码是用 C (ANSI C) 编写的。 代码应该为递归函数中的每个数字返回数字 (n+1)。(123 -> 234; 801->912; 239->340) 问题是当
这可能是一个愚蠢的问题,但是我很难找到我需要的答案。我有一个计算中继器的测试。我想返回 count 变量,以便我可以将其传递给另一个测试以在 for 循环中使用。 我尝试过的: this.counts
我有这个字符串列表: private final List categoryList = Arrays.asList("27", "28, 96", "10", "15", "7", "98"); 从
我正在使用互操作将 excel 文件转换为 pdf。我有一个工作代码。 但在将其保存为 pdf 之前。它会提示一个对话框,要求用户“是否保存对文件的更改”我怎样才能避免这个提示? 保存完成后如何关闭e
我有一个 Canvas ,我想将其转换并显示在标签中。我知道我们可以使用 toDataURL() 和 toBlob() 将 Canvas 转换为图像,但这两种方法都给我 base64 数据,这不是图像
我有一个获取用户 profilePicture、lblUsername 和 lblEmail 的 Facebook 登录名。我知道 FBProfilePictureView 是一个包含 UIImage
我正在尝试使用 grunt-webfont 从 SVG 生成网络字体. 问题是我需要这个任务在 windows 和 linux 机器上有效。为了实现这一点,我需要使用 doesn’t work wit
我使用的是我在 GitHub 上发现的一个 JS 插件,它使视频标题出现视差,问题是当我运行它响应手机时视频变黑,我试图在响应模式下将视频更改为图像。 我尝试使用@mediatag 但无法正常工作。
我正在尝试学习 Go 并研究降雨强度工具。对于此工具,我必须进行如下计算: var intensity float32 intensity = 10^((value−109)÷32) 值是一个 uin
我有一个看起来像这样的字符串,例如 Lübeck Nürnberg Österreich 和“Umlaute”。 现在我想拆分它并在字符串上添加新的“单词”,如下所示Lübeck Nürnberg Ö
我的任务: 通过 ffmpeg 将 YUV Frame 数据转换为 jpeg 图像。 我有的: 每个平面的数据和每个平面的线尺寸; 我试图创建空的 AVFrame 并用这些信息填充它的数据和行大小,但
使用 Reflex-DOM,我想做一个 Event t ()当浏览器准备好绘制下一帧时触发,即 requestAnimationFrame火灾。我试过这样: {-# LANGUAGE Recursiv
我有一条路线 Route::post('/updateLogo', 'CaptivePortalController@updateLogo'); 然后我在这里发布 $http({ method
我是一名优秀的程序员,十分优秀!