2011-11-10 51 views
0

我在java示例中遇到了hough變換下的這個程序。但即時通訊在C#做我的項目,我無法弄清楚這個部分代碼「0xff000000」是什麼。這段代碼是什麼 - 0xff000000是它的顏色?如果它的顏色我如何轉換它C#?未知的代碼片段 - 0xff000000

private void drawPolarLine(int value, int r, int theta) { 
      for(int x=0;x<width;x++) { 

       for(int y=0;y<height;y++) { 

         int temp = (int)(x*Math.cos(((theta)*Math.PI)/180) + y*Math.sin(((theta)*Math.PI)/180)); 
        if((temp - r) == 0) 
         output[y*width+x] = 0xff000000 | (value << 16 | value << 8 | value); 

       } 
      } 
     } 

if ((input[y*width+x] & 0xff)== 255) { 
    //......... 
} 
+0

不管哪種編程語言是從哪個轉換而來的,你應該總是努力用常數來代替[Magic Numbers](http://en.wikipedia.org/wiki/Magic_number_(programming)#Unnamed_numerical_constants)。 'private static final int COMPLETELY_OPAQUE = 0xFF000000;'等 – Mike

+0

@Mike謝謝 – user1017919

回答

3

十六進制數字0xFF000000以點十進制表示法表示爲255.0.0.0。數字0和1代表?

十六進制字符通常不代表特定的十進制字符。它代表基地2(二進制)號碼系統中的4位。這就是爲什麼十進制表示法用於IP地址的原因。它使得用戶更易讀,因爲十六進制FF總是用來表示一個完整的二進制字節,它總是可以用點十進制表示爲255。

假設您想要表示1111 1111 0001 1111,即使十六進制中的FF1F實際上是Base 10(十進制)數字系統中的65311,也會以點十進制格式使用0.0.255.31。

Hex ..........Decimal.......bin 
0...............0..............0 
1...............1..............1 
2...............2..............10 
3...............3..............11 
4...............4..............100 
5...............5..............101 
6...............6..............110 
7...............7..............111 
8...............8.............1000 
9...............9.............1001 
A..............10............1010 
B..............11............1011 
C..............12............1100 
D..............13............1101 
E..............14............1110 
F..............15............1111 
10............16........0001 0000 

編程語言Java沒有爲您提供指針,因此您不能訪問對象/整數和其他東西的內存位置。我不確定c#是否可以,但如果你真的想了解內存位置是如何工作的,我會學習像C++這樣的語言。

+0

您可以使用C#中的指針,但我認爲這不是相關的。問題是關於數字,而不是內存地址。 – svick

+0

@svick謝謝 – user1017919

2

代碼0xff000000只是一個數字的十六進制表示形式。具體來說,數字爲4,278,190,080。您可以在C#中以相同的方式使用它。

在這段代碼中,它可能代表一種顏色,但是如果不知道更多關於你在做什麼的內容,很難說清楚。

+0

我將十六進制值轉換爲int Convert.toInt32(0xff000000)。它的工作。謝謝你的幫助 – user1017919

+0

嗯,那不應該工作。 'Int32'的值太大了。您的代碼會爲我引發異常。 – svick

+0

@downvoter,謹慎評論你認爲這個答案錯了​​嗎? – svick

4

它只是一個數字的十六進制表示。 0xF = 15,0XF0 = 240,爲0xFF = 255,0xF12A = 61738,...,0xff000000 = 4278190080

當你做它更容易理解,更有意義的編碼位運算

+0

謝謝你的朋友 – user1017919