JS進製轉換總結

2022-03-08 18:20:52 字數 2164 閱讀 5776

如:0xf5 轉 十進位制, 使用 parseint('f5', 16) 進行轉換,結果為:245。結果沒錯,但不是我想要的結果。

js 在轉換時,把 0xf5 看作是多位元組的,高位位元組補 0。完整格式為:0x000000f5 或者 0x0000000000000000f5 (反正比0xf5單位元組大) (二進位制為 00000000000000000000000011110101), 其轉換為十進位制自然是 245。

但是我想要的是把 0xf5 看作是單位元組的。格式為:0xf5(二進位制為 11110101),其轉換結果為:-11。

問題原因就是,js預設把0xf5看作是乙個多位元組的。那麼解決方法就是把0xf5看作是單位元組的或者把0xf5看作是多位元組有符號的(也就是 0xfffffff5)。

解決辦法有三個:

1:使用 int8array 包裝一下:

int8array 為二進位制補碼8位有符號整數的陣列,並預設轉成了10進製。取出來即可。

而如果使用uint8array:則是無符號的,結果為 245。

將高位位元組轉換為1,也就是把 00000000000000000000000011110101 改為 11111111111111111111111111110101:

直接使用按位或操作:將 0xf5 按位或 0xffffff00:

這種方法是強制將高位位元組改為 1。此方法弊端是如果數字較大或較小,或的值就需要跟著變。

3:此種方法跟第二種差不多,但更通用。

此種方法是使用按位與操作:將0xf5 按位與 0xffffffff,但要注意的是,0xf5 與 0xffffffff 的位元組必須一樣。也就是把 0xf5 看作是多位元組有符號的,修改為 0xfffffff5。

0xfffffff5 與 0xffffffff 操作後還是 0xfffffff5,但他已經是有符號的了。所以結果為有符號的。

1:有符號轉換

十六進製制 轉 十進位制:

1 parseint(new int8array(['0xf5'])) //

-112

new int8array(['0xf5'])[0] //

-113 parseint('0xffffff' + 'f5' & '0xffffffff') //

-11

十進位制 轉 十六進製制:

1

new uint8array(['-11'])[0].tostring(16) //

f5

2:無符號轉換

十六進製制 轉 十進位制:

1 parseint(new uint8array(['0xf5'])) //

2452

new uint8array(['0xf5']) //

2453 parseint('0x' + 'f5' & '0xffffffff') //

2454 parseint('f5', 16)//245

5 parseint(0xf5) //245

十進位制 轉 十六進製制:

1 parseint(245).tostring(16) //f52

new uint8array(['245'])[0].tostring(16) //

f5

在轉換 0xfffffff5時,其結果為 4294967285。

所以js在轉換的時候,把0xfffffff5 看作了乙個比4位元組還大的數,所以高位為0,結果就為 4294967285。

在解決方法的第三點:需要兩者位元組一致,就是限制在某個位元組下。也可以這樣:0xffffffffffff & 0xfffffffffff5  // -11。

經過測試,最起碼限定在 4位元組或以上。

JS 進製轉換

js中的進製轉換主要運用兩個函式即 tostring 方法 返回物件的字串表示。objectname.tostring radix 引數 objectname 必選項。要得到字串表示的物件。radix 可選項。指定將數字值轉換為字串時的進製。說明 tostring方法是所有內建的 jscript 物...

js 進製轉換

十進位制轉其他進製 const x 110 log x.tostring 2 log x.tostring 8 log x.tostring 16 其他進製轉十進位制 const x 110 log parseint x,2 log parseint x,8 log parseint x,16 其他...

js 進製轉換

js的進製轉換,分為2進製,8進製,10進製,16進製制之間的相互轉換,我們直接利用 物件.tostring 即可實現 執行下面 10進製轉為16進製制 10 tostring 16 a 8進製轉為16進製制 012 tostring 16 a 16進製制轉為10進製 0x16 tostring 1...