2011-05-15 93 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,这对于该语言来说非常基础。