第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在golang中將一個(gè)指針轉(zhuǎn)換為另一種類(lèi)型

在golang中將一個(gè)指針轉(zhuǎn)換為另一種類(lèi)型

Go
慕尼黑的夜晚無(wú)繁華 2022-01-17 16:39:18
我想將 float64 數(shù)字轉(zhuǎn)換為 int64 數(shù)字。也就是說(shuō),我想讀取 float64 寄存器的二進(jìn)制內(nèi)容,就好像它是 int64 值一樣。我的意思是,我想要以下 C 代碼的 go 等價(jià)物long y;float x = 1.2;y  = * ( long * ) &x;我怎么做?這是我的嘗試,但不起作用。package mainimport (    "fmt")func main() {    x := float64(1.2)    y := *((*int64)(&x))    fmt.Println("Ans:  ", y)}
查看完整描述

2 回答

?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊

也就是說(shuō),我想讀取 float64 寄存器的二進(jìn)制內(nèi)容,就好像它是 int64 值一樣。

嘗試math.Float64bits

x := float64(1.2)
fmt.Printf("Ans:  %x", math.Float64bits(x))

https://play.golang.org/p/QB4jqwJD0f

打印Ans: 3ff3333333333333。


查看完整回答
反對(duì) 回復(fù) 2022-01-17
?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊

Go 不允許在不同類(lèi)型的指針之間進(jìn)行轉(zhuǎn)換,因?yàn)樗举|(zhì)上是不安全的。但是,如果您仍然想這樣做,包中有一個(gè)Pointer類(lèi)型unsafe,它表示指向任意類(lèi)型的指針。

任何類(lèi)型的指針都可以unsafe.Pointer轉(zhuǎn)換unsafe.Pointer為任何類(lèi)型的指針,只要它們具有相同的內(nèi)存結(jié)構(gòu)即可。這允許您忽略類(lèi)型系統(tǒng)并將任何類(lèi)型的數(shù)據(jù)解釋為任何其他類(lèi)型的數(shù)據(jù)。

您在 Go 中的示例中的 C 代碼的確切等效項(xiàng)是:

var y int64
var x float64 = 1.2
y = *(*int64)(unsafe.Pointer(&x))

因此,首先我們轉(zhuǎn)換&xunsafe.Pointer,然后將其轉(zhuǎn)換為*int64,最后取消引用以得到int64與 具有相同位結(jié)構(gòu)的x.

請(qǐng)記住,這是有原因的unsafe。如果您只想知道這些位是什么,最好使用math.Float64bits(). 但是,例如,如果您必須使用按位運(yùn)算符,float那么您當(dāng)然必須將其轉(zhuǎn)換為int(并返回)。


查看完整回答
反對(duì) 回復(fù) 2022-01-17
  • 2 回答
  • 0 關(guān)注
  • 563 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)