【问题标题】:converting C to C#将 C 转换为 C#
【发布时间】:2011-11-28 06:41:31
【问题描述】:

我正在尝试将此 C 代码转换为 C#,是否有与 C union typedef 等效的 C#?

struct sockaddr_in {
    short   sin_family;
    u_short sin_port;
    struct  in_addr sin_addr;
    char    sin_zero[8];
};

typedef struct in_addr {
  union {
    struct {
      u_char s_b1,s_b2,s_b3,s_b4;
    } S_un_b;
    struct {
      u_short s_w1,s_w2;
    } S_un_w;
    u_long S_addr;
  } S_un;
 } IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

谢谢。

【问题讨论】:

  • 此代码似乎用于 TCP/IP 处理代码。 C# 有它自己的 TCP/IP 处理,因此您不需要这样做。除非您尝试做一些非常低级别的事情,在这种情况下,C# 不是您的最佳选择。代码到底是做什么用的?不,C# 中没有联合的等价物。

标签: c# c struct unions


【解决方案1】:

您可以查看following page。话虽这么说,在 .NET 中,您拥有允许您直接使用套接字和 TCP/IP 的类,例如 Socket、TcpListener、TcpClient,并且您不需要盲目地翻译 C 代码。

【讨论】:

    【解决方案2】:

    虽然其他人肯定有道理 - 这可能是您真正不需要做的事情 - 一种使用 @987654321 在 C# 中模拟联合的方法@(模拟联合here的例子)。

    但不要这样做。这个 C 联合的目的似乎是允许 4 字节长的位旋转部分。以这种方式使用联合取决于目标体系结构的字节顺序知识,这是 C# 无法保证的。

    在 C# - 或任何其他关注可移植性的语言中 - 如果您想获取或设置高字节/低字节/等,您需要使用显式位移,如 here 所述。

    但是也不要那样做。像其他人所说的那样,不要移植此代码。有人已经为您完成了,很可能是 Microsoft 在内置库中;)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 2020-06-27
      • 2011-12-24
      • 2019-02-23
      相关资源
      最近更新 更多