【问题标题】:What is this Objective C code doing这个 Objective C 代码在做什么
【发布时间】:2013-12-03 16:42:28
【问题描述】:

我是 C 类语言 (Java/JavaScript/C#) 的开发人员,我正在尝试将一些 Objective-C 代码转换为 Java。

在大多数情况下,它相对简单,但我用以下代码遇到了一个绊脚石:

typedef struct {
    char *PAGE_AREA_ONE;
    char *PAGE_AREA_TWO;
    char *PAGE_AREA_THREE;
} CODES;

- (CODES*) getOpCode {
    CODES *result = NULL;
    result = malloc(sizeof(CODES));

    result->PAGE_AREA_ONE = "\x1b\x1b\x1b";
    result->PAGE_AREA_TWO = "\x2d\x2d\x2d";
    result->PAGE_AREA_THREE = "\x40\x40";

    return result;
}

Java 相当于什么?从我在代码的其他区域可以看出,它被用于存储常量。但我不是 100% 确定。

谢谢。

【问题讨论】:

  • @MaxWoolf 很确定 C 是 Objective-C 的真子集
  • 设置 result = NULL 然后访问 result->PAGE_AREA_ONE 看起来更像是崩溃的秘诀......
  • @MartinR 道歉 - 我错过了 malloc。
  • @MaxWoolf 声明 - (CODES*) getOpCode 是这个 Objective-C 代码的原因。 - 表示getOpCode 是某个类的实例方法。

标签: objective-c data-structures struct


【解决方案1】:

typedef 只是创建一个包含三个字符串属性的结构。 getOpCode 方法显然是在尝试创建一个新结构并为这三个属性分配值。 C# 代码将是:

public class Codes
{
    public string PageAreaOne;
    public string PageAreaTwo;
    public string PageAreaThree;
}

public Codes GetCodes()
{
    Codes result = new Codes();
    result.PageAreaOne = "\x1b\x1b\x1b";  // three ESC characters
    result.PageAreaTwo = "---";
    result.PageAreaThree = "@@";
    return result;
}

【讨论】:

    【解决方案2】:

    有问题的代码是分配一块大小与CODES 结构相同的内存块,用一些数据填充它,然后返回一个指向新块的指针。数据显然是一些操作代码(即指令),因此可能正在将数据发送到将执行指令的其他设备。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      相关资源
      最近更新 更多