2010-10-12 12 views
7

C# cinsinden bir iki bayta nasıl dönüştürebilirim?C# 'da int'yi iki bayta nasıl dönüştürebilirim?

+0

Int'in hangi bölümü? Tam 32 bitlik bir tamsayı değerini kodlamak için iki bayt yeterli değildir. – dtb

+1

'int', depolama için 4 bayt gerektirir. MSB'lerde bilgileri kaybetmek ister misiniz? –

+0

Kim * bip * bunu düşürdü. C yolu aniden C# için iyi bir neden olmadan işe yaramaz ve açık API'lar mevcut olmadığından (BitConverter yavaştır ve birçok şekilde * kırık *) bu yararlı ve ilginç bir sorudur. – Joshua

cevap

11

sadece düşük bayt istiyorum varsayarsak:

byte b0 = (byte)i, 
    b1 = (byte)(i>>8); 

Ancak 'int' beri uncaptured 2 daha bayt bırakır 'Int32' dir.

+0

Bu benim çözümüm. Çok fazla BitConverter'den daha hızlı olmalı. – Joshua

+5

@Joshua, Hızlı bir benchmark yaptım (Sürüm oluşturma, 50000000 yineleme, Kronometre ve çeşitli testler kaldırmak için iki kez yinelenen tam test) ve bir dizi oluşturma ve bit maskeleme kullanarak BitConverter çağırma arasındaki fark yaklaşık 1ns başına Makinemi çağır. Dizi oluşturmayı kaldırırsanız (sadece iki bayt olsun), fark yaklaşık 14ns'dir. –

+0

Kriterlerinden şüphe etmiyorum. BitConverter, dizileri ayırmak zorunda olduğu için karşılaştırmada yavaştır. Dizi büyüklüğümü binlerce tam sayı için önceden algılayabiliyorsam, çok az zaman harcayabilirim. – Joshua

2

bunu yapmak için başka bir yol yoktur, ancak, sonuçta 4 bayt olmayacak diğer yöntemler gibi kaygan olmasına rağmen:

Int32 i = 38633; 
byte b0 = (byte)(i % 256); 
byte b1 = (byte)(i/256); 
2

bir int16 mı?

Int16 i = 7; 
byte[] ba = BitConverter.GetBytes(i); 

Bu, içinde yalnızca iki bayt olacaktır.

İlgili konular