ios - 如何从 NSString 获取特定字节长度的子字符串
<p><p>比如我有一个 <code>NSString</code> 是 <code>str = @"我就是测试一下"</code> 或者 <code>str = @"我"</code> 。我想限制一定的字节长度。例如 <code>byteLength = 10</code>。 </p>
<p>我知道 subSrtring 不是 <code>str.length=10</code> 如何从 NSString 中获取一定字节长度的 subString,谢谢</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您可以使用 <code>dataUsingEncoding</code> 方法从 <code>NSString</code> 获取 <code>NSData</code>。然后使用 <code>length</code> 和 <code>bytes</code> 属性获取 <code>byte length</code> 或 <code>bytes</code></p>
<p>那么如果 <code>NSData's length > 你的特定长度</code> 你应该使用 <code>+ (id)dataWithBytes:(const void *)bytes length:(NSUInteger)length;</code> 方法获取一定长度的字节 <code>NSData</code> 你应该小心返回 <code>NSData</code> 可能无法被 <code>NSString</code></p> 解码
<p>最后你可以使用 <code>- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;</code> 方法得到你想要的结果<code>NSString</code></code> p>
<p>你可以使用下面的代码:</p>
<pre><code>- (NSString *)fetchStringWithOriginalString:(NSString *)originalString withByteLength:(NSUInteger)length
{
NSData* originalData=;
const char *originalBytes = originalData.bytes;
//make sure to use a loop to get a not nil string.
//because your certain length data may be not decode by NSString
for (NSUInteger i = length; i > 0; i--) {
@autoreleasepool {
NSData *data = ;
NSString *string = [ initWithData:data encoding:NSUTF8StringEncoding];
if (string) {
return string;
}
}
}
return @"";
}
</code></pre>
<p>你可以像这样调用上面的方法:</p>
<pre><code>NSString* originalString= @"我就是测试一下";
NSString *string = ;
NSData* stringData=;
NSLog(@"10 bytes string : %@ ; it only %i bytes",string,stringData.length);
</code></pre>
<p>结果:
<img src="/image/Ol2nx.jpg" alt="enter image description here"/> </p>
<p>小心:
<code>- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;</code> 可能返回 <code>nil</code></p>
<p>正如苹果所说:<code>- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;</code> 返回:</p>
<blockquote>
<p>An NSString object initialized by converting the bytes in data into
Unicode characters using encoding. The returned object may be
different from the original receiver. Returns nil if the
initialization fails for some reason (for example if data does not
represent valid data for encoding).</p>
</blockquote>
<p>所以你应该使用 for 循环来获取可以通过 <code>NSSting</code></p> 解码的最近长度数据</p>
<p style="font-size: 20px;">关于ios - 如何从 NSString 获取特定字节长度的子字符串,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/18583655/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/18583655/
</a>
</p>
页:
[1]