将NSString转换为字节

时间:2015-01-05 11:28:23

标签: ios objective-c

我对NSString to Bytes转换有疑问。

我的问题是 我想从Bytes创建NSData。这里在下面的代码一切都很好,但代替combinedStr我必须传递int variables.i.e 0101,0102,...

我在名为combinedstring的变量中获取了字符串变量,如@“0101”,@“0102”.....如果我将combinedstring转换为int,那么它将给出名为101,102的值...但是我想要0101,0102 ......任何人都可以帮我解决这个问题。

  NSData *valData = [NSData dataWithBytes:(Byte[]){254,1,200,0.5,combinedstring,0.4,1} length:7];

请记住combinedstring是一个String和变量。在combinedstring的位置,我们只能传递int值。

如果我的问题不明确,请告诉我

1 个答案:

答案 0 :(得分:2)

您可以将NSString的实例转换为NSData的实例 -dataUsingEncoding:allowLossyConversion:-getCString:maxLength:encoding:(NSStringEncoding)encoding的C数组。

在这两种情况下,你都有一个指向对象的指针。到char[]。将该指针放入Byte数组,将转换指针并复制其值,但不会复制引用的数据。

此外:在您的示例中,您尝试将0.4(零 - 期 - 四)和0.5(零 - 期 - 5)保存到Byte[]。你可能期望这不会起作用。它会将值转换为类型Byte的值(整数类型!)并存储该值。大于255的整数值也将被转换。

因此,您必须使用可变数据对象并单独连接不同类型的二进制表示。

一个例子:

NSData *stringData = [combinedString dataUsingEncoding:… allowLossyConversion:NO];
if (stringData == nil)
{
   // error handling
}


NSMutableData *data = [NMutableData new];
Byte *byteArray;
float *floatArray;

// Adding byte data
byteArray = (Byte[]){254,1,200};
[data appendBytes:byteArray length:3*sizeof(Byte)]; // Adds 254, 1, 200

// Adding floating point data – Hopefully the receiver has the same floating point format.
floatArray = (float[]){0.5};
[data appendBytes:floatArray length:1*sizeof(float)]; // Adds 4! bytes representing the float value

// Adding string data – Hopefully the receiver uses the same string encoding
[data appendData:stringData]; // Adds the bytes for the string in the above encoding.