十進位制任意整數型別向常見數值型別進製轉換的通用辦法

2022-04-20 10:01:12 字數 1575 閱讀 6810

乙個十進位制數字轉換成任意的其它常用進製(比如二進位制或者八進位制,十六進製制……)。通常我們可以使用convert.tostring的乙個過載函式去完成:具體**和函式體宣告,請看給出的msdn例子)。

現在有客戶提出乙個問題:你那個convert只能夠接受byte,int或者long型別,那麼我其它型別的數字怎麼辦(比如無符號型別的一類,如uint,ulong)?難道還要強制轉化成帶符號的int或者long?強制轉換之間如果損失誰賠償呢?呵呵!

這裡非常感謝亂馬客給我「當頭棒喝」,點撥我一下。要解決這個問題,我們可以借助bitconverter這個類的乙個方法getbytes。這個方法的原理如下:

1)現在假設有乙個十進位制數字10(二進位制:00001010)。

2)因為8個bit是乙個位元組(byte),因此getbytes將返回乙個byte陣列(10,0,0,0);也就是說:把十進位制轉化成二進位制,然後從右到左,每8個bit作為乙個byte存入從第乙個位元組開始的記憶體單元中。(返回的byte陣列的長度(個數)取決於被轉換數字的型別自身長度,比如int返回4個位元組陣列(包括uint),long(ulong)返回8個位元組陣列等)

亂馬客所引用的回答如下:(引用原文:

[c#]

string s = string.empty;

foreach (byte b in bitconverter.getbytes(10))

console.writeline(s);

[vb.net]

dim s as

string = [string].empty

foreach b as

byte

in bitconverter.getbytes(10)

s += convert.tostring(b, 2).padleft(8, "

0"c)

next

console.writeline(s)

這樣做當然完全正確,只是略有寫「觀感不佳」——因為最低位永遠是放到前面的,這樣最左邊是2的0 次方(或者是m的n-1次方

)形式。所以改進演算法這樣這樣就可以了:

[c#]

int unum = 0;

byte bytes = bitconverter.getbytes(unum);

string s = "";

foreach (var item in bytes)

console.writeline(s);

[vb.net]

dim unum as

integer = 0

dim bytes as

byte() = bitconverter.getbytes(unum)

dim s as

string = ""

foreach item as var in bytes

s = convert.tostring(item, 2).padleft(8, "

0"c) & s '2可以改成16或者8

next

console.writeline(s)

十進位制任意整數型別向常見數值型別進製轉換的通用辦法

乙個十進位制數字轉換成任意的其它常用進製 比如二進位制或者八進位制,十六進製制 通常我們可以使用convert.tostring的乙個過載函式去完成 具體 和函式體宣告,請看給出的msdn例子 現在有客戶提出乙個問題 你那個convert只能夠接受byte,int或者long型別,那麼我其它型別的數...

十進位制整數轉化R進製整數

棧結構的邏輯結構為線性的,可建立鏈式結構使得入棧 出棧的操作是動態的,也可以很好地實現進製的轉換。而且進製轉換恰好和棧的輸入輸出輸出類似,故選擇棧是最好的。功能 該函式實現建立初始化的棧。具體過程 1.建立乙個棧結構體指標s 2.將s指標指向的s top賦予 1,即定義棧頂初始為空。功能 該函式實現...

棧 十進位制轉化為任意制

include include define stack init size 100 define size increment 5 typedef struct 棧結構 sqstack,sqstack int stackinit sqstack s 初始化棧 int push sqstack s,...