【问题标题】:NSString to byte Array, manipulating it, and byte Array to NSStringNSString 到字节数组,操作它,和字节数组到 NSString
【发布时间】:2012-09-25 13:27:42
【问题描述】:

我正在 Windows 和 iOS 上制作一个项目。

在 Windows 中,我从用户那里获取输入,将其转换为字节数组,通过向每个字节添加大的随机值来操作数组(有点像对其进行编码),然后将转换为字符串的字节数组返回给用户。

我想在 iOS 应用中实现相同的功能。 我从 UITextField 获取输入(出口说:myTextField)

现在的问题是,我如何将它转换为 Windows 中的字节数组并对其进行操作。 我搜索了堆栈溢出,发现了这段代码

const char *bytearray = [self.myTextField.text UTF8String];

使用它,它给了我一个我想要的字节数组,但它是一个 const char *,我无法操作它。 那么如何将其存储在数组中以进行操作。

另外,当在 windows 中向数组中的字节添加值时,如果值超过 256,它会自动保持在 256 以内(例如,115 + 300,它存储为 159),这简化了我减去值的过程和取回原来的值。如何在 iOS 应用中做到这一点。

 For a better clarity, I'll give an example of how it works in Windows
 byte array contains 'n' (Decimal value: 110) 
 adding 200 to it stores '6' (Decimal value: 54) 
 [310 % 256 = 54]

 When retrieving back original value I subtract 200 from '6' (54 - 200 = -146) 
 and get the original value (256 - 146 = 110) 
 All this is done automatically, by using a byte array (this 256 - 146 thing)

如何在 iOS 中实现这种字节数组功能?

【问题讨论】:

    标签: ios arrays nsstring byte type-conversion


    【解决方案1】:

    如何将其转换为 Windows 中的字节数组并对其进行操作。我 搜索栈溢出,找到了这段代码

    看看 NSString 的-getCString:maxLength:encoding: 方法,它将使用您指定的编码解释字符串并将结果复制到您提供的缓冲区中。然后,您可以随心所欲地操纵它。类似的方法还有一两种其他方法,但应该可以帮助您入门。

    要转换回 NSString,您可以使用 +stringWithCString:encoding+stringWithUTF8String:+stringWithCharacters:length:-init... 中的任何一个版本。

    此外,当在 windows 中向数组中的字节添加值时,如果值 超过 256,它会自动保持在 256 以内(例如,115 + 300,它 存储为 159),这简化了我减去该值的过程和 取回原来的值。如何在 iOS 应用中做到这一点。

    决定这种行为的不是操作系统,而是语言。 Objective-C 在这方面的行为就像 C、C++ 和可能的 C# 一样——如果你使用像 unsigned char 这样的类型,值将被限制为 0..255。毕竟,你只能在 8 位中容纳这么多的值。

    【讨论】:

    • @KunalAggarwal 这和 C 完全一样——它 C. 使用你最喜欢的内存分配函数获取字符串的长度并创建适当大小的缓冲区,例如 malloc() 或 @ 987654332@。然后你可以使用上面的方法用你的字符串中的字符填充缓冲区。完成后不要忘记free() 缓冲区。
    • 使用unsigned char buf传入方法,给我一个警告!我该如何避免呢?
    【解决方案2】:

    我会将 NSString 对象转换为 NSMutableData 对象。然后使用 [NSMutableData mutableBytes] 你得到你想要操作的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2021-02-24
      相关资源
      最近更新 更多