2013-12-14 50 views
0

我想將可變大小的int32類型的值轉換爲具有最小長度和0填充的十六進制字符串。將任何值轉換爲可變長度的十六進制

實施例:434 = 01 B2

有幾種C#的方法,但它們都具有固定的大小,取決於值的類型,(實施例:的Int32將始終給出一個4個字節值像00 00 00 01數字1)。

可以編寫一個代碼來完成它,但我認爲有一個更短的方法。

感謝

samtal

+0

是在必要的十六進制字符串的空間? – WAKU

+0

空間不是功能上需要的,但它們使其更易於調試和維護。 如果它有所作爲,可以省略。 – samtal

回答

1
int x = 434; 
string s = x.ToString("X").PadLeft(5,'0'); 

這將產生,001B2

+0

謝謝,但這是簡單(和錯誤)的方式,它不回答我的問題。 我有一個**變量**值。可以是1,可以是163158,可以是1字節或3(對於163158 = 02 7D 56)。 PadLeft(5,'0')決定5個字符。 此外,十六進制的字節必須是奇數字符,不5. 我需要一種解決方案,將只顯示最低限度的必要充分十六進制字節(每2個字符,填充0左),但沒有填充到整數(像00 00 00 01爲1)。 – samtal

+0

對不起,我在prev評論中有錯誤。 我的意思是「十六進制字節必須是** EVEN **數字字符」, – samtal

1

好,INT3ὰ的答案是接近的,只是需要進一步的偶數處理:

int x = 434; 
string s = x.ToString("X"); 
s = s.Length % 2 == 0 ? s : "0" + s; 

關於空格問題,我沒搞清楚一個非常簡單的方法,但是,你可以看看this

0

感謝WAKU爲s = s.Length%2 == 0的缺失部分? s:「0」+ s; 我解決了字節迭代和雙填充的空間(或任何字符)如下: (不是真的乾淨,但工作)

int i; string d; 
     long x = 258458685; 
     string s = x.ToString("X"); 
     s = s.Length % 2 == 0 ? s : "0" + s; 
     for (i = 0; i < s.Length ; i = i + 2) 
     { 
      d = s.Substring(i ,2); 
      Console.Write(d.PadLeft(2, '0').PadLeft(3,' ')); 
     } 

結果:0F 67 C4 3D

相關問題