1

我想在目标 c 中创建一个字节数组,我找不到 java 的 ByteArrayOutputStream 和 DataOutputStream 的等效代码。例如..

ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeLong(counter); //counter is a long data type for eg 1165620611
dos.flush();
byte[] data = bos.toByteArray();
return data;

此代码实际上返回八字节数组...这是 java [0,0,0,0,69,121,-11,-125] 中的输出

这正是我在目标 c 中想要的。

4

3 回答 3

6
// #1 long to char array
long l = 1165620611;
char bytes[sizeof(long)];
memcpy(bytes,&l,sizeof(l));

// #2 char array to nsdata
int size = sizeof(bytes)/sizeof(char);
NSData *data = [NSData dataWithBytes:bytes length:size];

// #3 nsdata to char array
char buffer[size];
[data getBytes:buffer length:size];

// #4 prints char array: 0 0 0 0 69 121 -11 -125
while (0<size--) {
    NSLog(@"%d",buffer[size]);
}

NSData 根本不需要,您可以跳过步骤#2 和#3。

于 2013-02-03T17:14:15.757 回答
5

在目标中使用 charbuff[]数组 - c

于 2013-01-14T06:23:45.940 回答
1

您可以为此使用NSDataNSMutableData类。

NSData 及其可变子类 NSMutableData 为字节缓冲区提供数据对象、面向对象的包装器。数据对象让简单分配的缓冲区(即没有嵌入指针的数据)具有 Foundation 对象的行为。

NSData 创建静态数据对象,而 NSMutableData 创建动态数据对象。NSData 和 NSMutableData 通常用于数据存储,并且在分布式对象应用程序中也很有用,其中数据对象中包含的数据可以在应用程序之间复制或移动。

数据的大小受到大约 8 ExaBytes 的理论限制(实际上,限制不应成为一个因素)。

NSData 与其核心基金会对应的 CFDataRef 是“免费桥接”的。有关免费桥接的更多信息,请参阅“免费桥接”。

于 2013-01-14T06:25:50.027 回答