2014-06-08 24 views
5

Baytta biraz bit işlemleri gerçekleştiren bazı C# kodlarım var. Golang'da da aynısını yapmaya çalışıyorum ama zorluklarım var. C#Golang bitli işlemlerin yanı sıra genel bayt işlemi

Örnek

byte a, c; 
byte[] data; 
int j; 
c = data[j]; 
c = (byte)(c + j); 
c ^= a; 
c ^= 0xFF; 
c += 0x48; 

Ben golang bayt tipine bitsel işlemleri gerçekleştirmek olamaz okudum. Bu nedenle, bu işlemleri gerçekleştirmek için kodumu uint8 tipine değiştirmem gerekecek mi? Öyleyse bunu uygulamak için temiz ve doğru/standart bir yolu var mı?

cevap

11

Git kesinlikle basitçe uint8 bir diğer adıdır byte türü, üzerinde ikilik işlemleri yapabilirsiniz. Ben Kodunuza yapmak zorunda sadece değişiklik: değişken bildirimlerini

  1. dizimi aritmetik yaparken Git (tasarım gereği) tamsayı promosyon dönüşümleri yoksun beri
  2. , c eklemeden önce byte için j dönüştürün.
  3. Noktalı virgülleri çıkarma. Tek yapmanız planlıyorsanız İşte

Eğer

var a, c byte 
var data []byte 
var j int 
c = data[j] 
c = c + byte(j) 
c ^= a 
c ^= 0xFF 
c += 0x48 

gitmek bit şeklinde değil Go, bunun için operatör, diğer birçok çağdaş programlama dillerinde kullanılan ~ ^ olmadığını unutmayın . Bu, xor için kullanılan aynı işleçtir, ancak ikisi de belirsiz değildir, çünkü derleyici, ^'un tek veya ikili bir operatör olarak kullanıldığını belirleyerek hangisinin olduğunu söyler.

+0

Teşekkürler. Varsaydım, çünkü uzunluk 1'in bir [] baytında bitmeyen işlemleri gerçekleştiremedim ve imzasız inters üzerinde yapabildim. – John

+0

@john Dilimler halinde bit uzunluklu işlem yapılmaz, uzunluk 1 olsa bile. Bu, bir skaler uzunluğunun 1 vektörü ile aynı olduğu R veya MATLAB değildir. –