C言語では 0.5
を一発で 1056964608
に変換するということができます。
#include <stdio.h>
int main() {
float f = 0.5;
printf("%d\n", *(int *)&f); // => 1056964608
}
(ただし処理系やCPUアーキテクチャによって書き方は変わる。上記は MacOS Sierraかつ clang-900.0.39.2での例)
これを Go言語で書くにはどうすればよいでしょうか。
結論から言うと unsafe.Pointer
という型を使うと同じようなことができます。
package main
import "fmt"
import "unsafe"
func main() {
var f float32 = 0.5
var p unsafe.Pointer
p = unsafe.Pointer(&f)
fmt.Printf("%d\n", *(*int32)(p)); // => 1056964608
}
なんの役に立つのかというと、メモリを直接手でいじっている気分にひたれます。