0

我正在 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 中实现这种字节数组功能?

4

2 回答 2

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 位中容纳这么多的值。

于 2012-09-25T13:38:06.837 回答
1

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

于 2012-09-25T13:38:11.060 回答