gpt4 book ai didi

ios - 将 NSString 解析为字节数组

转载 作者:行者123 更新时间:2023-11-29 04:11:17 25 4
gpt4 key购买 nike

我需要将 NSString 解析为字节数组,但在执行此操作时遇到了一些问题。我在一个方法中有一个填充的字节数组,并将其转换为可变字符串,然后我有一个方法需要将这些数字放回到字节数组中。在 C# 中,它会很简单:

do
{
val = byte.Parse(str.Substring(i, 3));
byteArr[j++] = val;
i += 3;
}

这是代码片段注意**我在 do 循环中尝试了很多不同的事情,所以现在那里一团糟:

-(NSData*) StrToByteArray: (NSString*)str 
{
NSLog(@"StrToByteArray. String: %@", str);
if([str length]==0)
NSLog(@"Invailid String");
int val;
Byte byteArr[[str length]/3];
int i = 0;
int j = 0;
NSRange range;
do {
range = NSMakeRange(i, 3);
val = (int)[str substringFromIndex:i];
NSLog(@"StrToByteArray. VAR: %i", val);
byteArr[j++] = val;
NSLog(@"byteArr: %i",byteArr[i]);
i+=3;
}while(i<str.length);
NSData* wrappedByteArr = [NSData dataWithBytes:&byteArr length: sizeof(byteArr)];
return wrappedByteArr;
}

这是生成填充字符串的循环:

for(int i = 0; i<=len;i++)
{
val = byteArr[i];
NSLog(@"byteArr to string original: %i", val);
if(val<(Byte)10)
{
[tempStr appendString:(@"00")];
[tempStr appendString:[NSString stringWithFormat:@"%d",val]];
}
else if(val<(Byte)100)
{
[tempStr appendString:(@"0")];
[tempStr appendString:[NSString stringWithFormat:@"%d",val]];
}
else {

[tempStr appendString:[NSString stringWithFormat:@"%d",val]];
}

}
NSLog(@"string: %@", tempStr);
return tempStr;

最佳答案

取2

现在我知道数据是什么样子以及你想如何解析它,我会像这样处理它:

- (NSData *) parseStringToData:(NSString *) str
{
if ([str length] % 3 != 0)
{
// raise an exception, because the string's length should be a multiple of 3.
}

NSMutableData *result = [NSMutableData dataWithLength:[str length] / 3];
unsigned char *buffer = [result mutableBytes];

for (NSUInteger i = 0; i < [result length]; i++)
{
NSString *byteString = [str substringWithRange:NSMakeRange(i * 3, 3)];
buffer[i] = [byteString intValue];
}

return result;
}

编辑:

通过提供自动填充整数的正确格式说明符,您的填充方法也可以得到简化。

for(int i = 0; i<=len;i++)
{
val = byteArr[i];
NSLog(@"byteArr to string original: %i", val);

[tempStr appendFormat:@"%03d", val];
}

关于ios - 将 NSString 解析为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14373121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com