【问题标题】:Converting NSString to Bytes将 NSString 转换为字节
【发布时间】:2015-01-05 11:28:22
【问题描述】:

我有一个关于 NSString 到字节转换的问题。

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

我在名为 combinestring 的变量中得到了像 @"0101",@"0102"..... 这样的字符串变量。如果我将 combinestring 转换为 int,那么它会给出名为 101,102 的值......但是我想要 0101,0102……谁能帮我解决这个问题。

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

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

如果我的问题不清楚,请告诉我

【问题讨论】:

标签: ios objective-c


【解决方案1】:

您可以将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.

【讨论】:

  • 感谢您的回答。请给我一些时间来测试它。
  • 我是在 Safari 中输入的,所以可能有一些拼写错误。您应该了解指针、数组和二进制数据在 C 中是如何工作的。这只是一个示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多