我使用IOS解密一个字符串,但是HEX输出比实际字符串略长 它在字符串末尾有一些00,当我使用NSData时会产生问题。
是否可以删除00生成的?
在我看到十六进制之后,我的数据试图删除它们,并且似乎可以使用
[dirtyData setLength:[dirtyData length] - 3]
但idk如何以编程方式计算有多少00有广告结尾
我相信我需要像php函数那样思考但与NSData hex兼容
function unpad($text){
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}
答案 0 :(得分:-1)
如果您存储了未填充数据的长度(在您的示例3中),那么您可以使用:
NSUInteger unpaddedLen = [dirtyData length] - 3;
NSRange unpaddedRange = NSMakeRange(0, unpaddedLen);
NSData* unpaddedData = [dirtyData subdataWithRange:unpaddedRange];
注意:NSData
是不可变的,这就是你的setLength不起作用的原因。另一种方法是使用NSMutableData
:
NSMutableData* dirtyData;
// fill dirtyData as just it would be NSData
[dirtyData setLength:[dirtyData length] - 3]; // will now work