2011-05-15 76 views
0

我嘗試到C LIB轉換爲C#和被卡在代碼:將C遷移到C#的問題!

typedef struct _Symbol 
{ 
    unsigned char value; 
    unsigned char count; 
    unsigned char under; 
    unsigned char left, right; 
} Symbol; 

// [...] 

void函數(符號*符號){

...

if (! symbol -> right) break; // So, right is equivalent to bool in C#? 

symbol += symbol -> right; // I have no idea what this code will do. 

...

}

請幫我一把。

+0

c#中的無符號字符將是一個字節。您在那裏的代碼會檢查右側是否大於零。 – 2011-05-15 14:52:30

+0

我懷疑這個符號被定義爲Symbol *符號,並且左邊和右邊是符號實例的偏移。 – kenny 2011-05-15 14:54:20

回答

1

在C++中,任何具有比較運算符且可與'0'比較的對象都可用於條件表達式中。如果表達式等於0,則表達式將計算爲false,否則表達式將計算爲true。

因此:if(!symbol->right)將符合,如果符號 - >右爲0。

以下

symbol += symbol->right 

被遞增由存儲在符號 - >右的值符號指針。

+0

謝謝!我現在明白了。所以,在C#中,我應該用'Symbol right'代替'unsigned char right'。 – BigOak 2011-05-15 15:09:17

0

左右是在結構中定義:

unsigned char left, right; 

這不是錯的,正確的「權」,但左,右右:)

及其等價於C#是不是bool的。

0

if (!symbol->right) break 

檢查是否在可變保持的字符爲空(等於 '\ 0')。所以,如果這個角色等於0,它就會破壞,否則它不會。

0

if(!symbol - > right)break;

我相信這是對int上下文中char的boolean NOT操作。例如:if(int)right = 0,這是真的。否則,這是錯誤的。

5

在C#中沒有->運算符。要引用結構成員,請使用.運算符。另外,您不能使用任何帶有if句子的表達式。您必須使用合適的布爾表達式:

if (symbol.right == 0) 
    break; 

而且,我不會試圖行由行一個C程序轉換成C#程序。它們基於不同的範例,因此您可能需要學習一些面向對象以及C#在嘗試翻譯代碼之前如何管理內存。

+1

謝謝,我知道C#,並且是C的新手。C是一種古老的編程語言,但它很有趣。 – BigOak 2011-05-15 15:17:40

4

if (! symbol -> right) break;說,如果權爲零,則打破

symbol += symbol -> right;這是執行指針運算,你需要明白爲什麼那麼你可以重新編碼成C#。 (假設符號類型爲Symbol*

1

試試這個:

struct Symbol 
{ 
Char value; 
int count; // if your counting, use an integer, not a character 
int under; // not sure that is supposed to represent 
int left; 
int right; 
} 

我不知道你想要什麼,或者需要做的右側和左側的數據成員。它看起來像你想至少增加它們,所以我把它們作爲整數。 在這種情況下,你不能只使用if(symbol.left)來測試它,而是你必須使用if(symbol.left> 0)等等......

另外C#沒有使用 - >操作員,但是。運營商獨家。

在.NET中,所有類型都不能僅僅投入其他類型。所以你不能將一個字符(C#中的Char)轉換爲一個bool或一個int。

如果你想繼續使用C,並且仍然利用.NET,你可以使用託管編譯器/ clr並編譯你所有的C代碼。但是你將不得不學習一些額外的語言關鍵字,並且編程有一點不同。

一般來說,如果你真的對C#和.NET不熟悉,我強烈建議你拿兩本書。第一本書是由Jeffrey Richter編寫的.NET(通過C#編寫的CLR)。它由微軟出版社出版,非常出色。另一本書可以或應該是C#特有的。 Charles Petzold在C#中有一本很好的C#入門書,稱爲Programming,這對於該語言來說非常基礎。