Cocoa将octals的NSArray / NSString转换为NSData?
我试图将这些C代码转换为Cocoa,我正在努力弄清楚如何。
char *deskey = "123 456 789 101 112 131 415 161";
unsigned char key[16];
memset(key, 0, sizeof(key));
sscanf(deskey, "%o %o %o %o %o %o %o %o",
(int*)&key[0], (int*)&key[1], (int*)&key[2],
(int*)&key[3], (int*)&key[4], (int*)&key[5],
(int*)&key[6], (int*)&key[7]);
我尝试过使用NSMutableArray和NSData,但没有运气。我能够扫描字符串并提取数字,但我不确定如何在此之后存储到NSData中。
NSMutableArray *enckey = [[[NSMutableArray alloc] init] autorelease];
NSScanner *scanner = [NSScanner scannerWithString:self.deskey];
int pos = 0;
while ([scanner isAtEnd] == NO) {
if ([scanner scanInt:&pos]) {
[enckey addObject:[NSString stringWithFormat:@"%o", pos]];
}
else {
NSLog(@"Your DES key appears to be invalid.");
return;
}
}
基本上尝试将ascii DES密钥转换为字符串以用于Triple DES加密。非常感谢任何帮助,谢谢!
没有找到相关结果
已邀请:
3 个回复
社攻取墟槽
,这就引出了一个问题,为什么你首先要在
上进行解析。 这是C代码的Objective-C转换。请注意,八进制被Cocoa视为古代历史,因此它的解析类只处理十进制和十六进制,因此您需要编写自己的或使用标准C函数(下面的
)。 这个例子产生了
和
- 选择一个。
如果你想接近Python的一行,只需将迭代压缩为:
但它当然更长!
郡豪靠暖
并添加以下行:
除了你的sscanf看起来非常错误。密钥的元素是字符,而不是整数。
赐黄
说谎编译器永远不会解决问题。
是一个
s的数组。告诉编译器,在函数调用
中,指向数组的指针是指向
s的指针并不能使它们如此;每个人指向的存储仍然存储为
,而不是更多。 结果是,每次尝试在您提供的地址存储一个
会覆盖前一个three15ѭ的四分之三。结果是,
只不过是一种比ѭ20更难做的事情。 我说“小一点”而不是“不再”是有原因的:
调用还会在数组末尾写入22英寸的字节,所以你也在粉碎堆栈并设置潜在的崩溃。
解析十进制字符串中的数字。
同样做它的名字:它创造一个字符串。使用您提供的格式,它会将数字转换为字符串,而不是相反。 因此,您使用
来解析十进制数,并使用
将其转换为八进制(并将其编码回字符串)。假设,从基于
的代码,输入是八进制的,这与你想要的相反。 这段代码肯定会给你数字,但它会给你错误的数字,这几乎和gave14ѭ代码一样糟糕,它给你全部零和一个崩溃。 您无法使用NSScanner扫描八进制数。 我也不确定你为什么叫这个变量
,因为它似乎不是一个位置。当然,这不是
给你的。 我能够扫描字符串并提取数字,但我不确定如何在此之后存储到NSData中。 请参阅NSData文档。 我尝试过使用NSMutableArray和NSData,但没有运气。 这与解决输入数据的问题无关。 我不确定NSArray或C数组(后者可选地包装在NSData中)是否是放置结果的正确位置。一旦解析了数字,这取决于您想要传递数字的位置。