【问题标题】:java to objective c with mallocjava使用malloc实现目标c
【发布时间】:2023-05-08 03:37:01
【问题描述】:

如何在 Objective-C 中移植这段代码?任何人请帮忙。

return data.length != 0 ? new Byte(data[0]) : null;  // In Java  

我正在这样做,但这并没有显示正确的结果

return datalen!= 0?malloc(sizeof(char) *data[0]) :NULL; //In Objective C it is write java data is byte 

**In obj C** datalen int datalen = sizeof(data)/sizeof(*data);

我无法返回数据值。有什么问题?

【问题讨论】:

  • 顺便说一句:你永远不会在 Java 中像这样使用new Byte(byte)。您可以使用自动装箱或Byte.valueOf(byte),因为每个可能的字节值都会被缓存。

标签: java objective-c char byte porting


【解决方案1】:

你应该返回一个 NSData 对象:

NSData* dataObj = nil;
if (datalen)
        dataObj = [NSData dataWithBytes:data length:1];

return dataObj;

【讨论】:

    【解决方案2】:

    在 Java 中,您将返回一个 Byte 类型的新对象包装器;在 Objective-C 中没有这样的对象。您在 Java 中返回的对象表示单个字节或 null 如果字节不存在(即数据数组的长度为零)。

    Objective-C 中最接近的东西是NSNumber

    -(NSNumber*) theMethod {
        // Prepare the data and compute datalen
        return datalen ? [NSNumber numberWithChar:data[0]] : nil;
    }
    

    您需要在接收端解开该值:

    if (returnedValue != nil) {
        char ch = returnedValue.charValue;
    }
    

    请注意,通过将sizeof 除以元素大小来计算datalen 的方式仅适用于C 数组对象。它不适用于传递给您的方法的指针和 C 数组。如果将数组传递到您的方法中,则还需要传递其长度。

    【讨论】:

      【解决方案3】:

      在 C 中,使用 sizeof 运算符(即不是函数),在这种情况下:

      int datalen = sizeof data;
      

      但我建议使用提到的 phix23 之类的 NSData,它更像 Objective-C 并且带有很多好东西。

      【讨论】: