2014-01-28 42 views
2

我有一小部分代碼試圖從0索引到7索引位移一個字節的1位。每個位移位後,我想借此int值,並將其轉換爲字節:轉換類型INT到類型字節

for(int t=0; t<8; t++) 
{ 
    int ShiftBit = 0x80 >> t; 
    byte ShiftBitByte = Convert.ToByte(ShiftBit.ToString(),8); 
} 

我期望的輸出是:

  • 0x80的
  • 0x40的
  • 爲0x20
  • 0x10
  • 0x08
  • 0x04
  • 0×02
  • 0×01

當我運行我的代碼我遇到異常「其他無法分析的字符在字符串的結尾。」有沒有更好的方法來捕獲這些字節?

謝謝

+1

你爲什麼不投入字節或我錯過了什麼? – PaulK

回答

2

爲什麼不這樣做,你呢?

for (int i = 0 ; i < 8 ; ++i) 
{ 
    int s = 0x80 >> i ; 
    byte b = (byte) s ; 
) 

或(清潔劑):

for (int i = 0x00000080 ; i != 0 ; i >>1) 
{ 
    byte b = (byte) i ; 
} 

要打開一個byte成十六進制字符串,像

byte b = ... 
string s = string.Format("0x{0:X2}",b) ; 

應該做的你。但byte是一個號碼,它沒有格式(表示),直到你把它變成一個字符串給它一個。

+0

感謝您的反饋。我想我真正想要做的是移動1,如下所示:10000000(或0x80),01000000(或0x40).... 0x00000001(或0x01)。一旦每個位移位,我想以十六進制格式「0x--」捕獲它。 – Nevets

+0

@Nevets,看我編輯的答案 –

2

你得到的錯誤,因爲你被錯誤地指定字符串在基地8位數字「8」是不是在基地8,只使用0到7合法數字。

爲什麼不

for (byte b = 0x80; b != 0; b >>= 1) 

感謝沒收......我真正的意思寫的是從指數0 INT 0x10000000的轉變有點7,然後每次轉換爲字節的數組[0x80的,0x40的,0x20的, 0x10,0x08,0x04,0x02,0x01]。那可能嗎?

我不明白int 0x10000000與它有什麼關係。如果你想要這個陣列,你可以通過多種方式實現:

byte[] xs = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; 

byte[] ys = Enumerable.Range(0, 8).Select(i => (byte)(0x80 >> i)).ToArray(); 

byte[] zs = new byte[8]; 
for (int index = 0; index < zs.Length; index++) 
    zs[index] = (byte)(0x80 >> index); 
+0

感謝捕捉...我真的要寫的東西是將int 0x10000000從索引0移動到7,然後每次將其轉換爲一個字節[0x80,0x40,0x20,0x10,0x08,0x04 ,0x02,0x01]。那可能嗎? – Nevets

+0

@Nevets我已更新我的回答來解決您的問題。 – phoog

2

你是在找這個嗎?

for (int t = 0; t < 8; t++) 
{ 
    int ShiftBit = 0x80 >> t; 
    byte ShiftBitByte = (byte) ShiftBit; 

    Console.WriteLine("0x{0:X}",ShiftBitByte); 
} 

enter image description here

Standard Numeric Format Strings