将String转换为包含Keycodes的数组

时间:2012-10-08 17:57:25

标签: objective-c keycode

今天我开始使用一个简单的Project,它应该将字符串转换为带有键码的数组,以模拟击键。 我的问题是我不能使用char作为字典的id来将该char转换为键码。

//Declare a Dictionary
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

//Add the Basic data for keycodes (i know that there are some missing)
[dictionary setObject:@"0x00" forKey:@"a"]; //a
[dictionary setObject:@"0x0B" forKey:@"b"]; // b
[dictionary setObject:@"0x08" forKey:@"c"]; //c
[dictionary setObject:@"0x02" forKey:@"d"]; // d
[dictionary setObject:@"0x0E" forKey:@"e"]; //e
[dictionary setObject:@"0x03" forKey:@"f"]; //f
[dictionary setObject:@"0x05" forKey:@"g"]; //g
[dictionary setObject:@"0x04" forKey:@"h"]; //h
[dictionary setObject:@"0x22" forKey:@"i"]; //i
[dictionary setObject:@"0x26" forKey:@"j"]; //j
[dictionary setObject:@"0x28" forKey:@"k"]; //k
[dictionary setObject:@"0x25" forKey:@"l"];//l
[dictionary setObject:@"0x2D" forKey:@"m"];//m
[dictionary setObject:@"0x2E" forKey:@"n"];//n
[dictionary setObject:@"0x1F" forKey:@"o"];//o
[dictionary setObject:@"0x23" forKey:@"p"];//p
[dictionary setObject:@"0x0C" forKey:@"q"];//q
[dictionary setObject:@"0x0F" forKey:@"r"];//r
[dictionary setObject:@"0x01" forKey:@"s"];//s
[dictionary setObject:@"0x11" forKey:@"t"];//t
[dictionary setObject:@"0x20" forKey:@"u"];//u
[dictionary setObject:@"0x09" forKey:@"v"];//v
[dictionary setObject:@"0x0D" forKey:@"w"];//w
[dictionary setObject:@"0x07" forKey:@"x"];//x
[dictionary setObject:@"0x10" forKey:@"y"];//y
[dictionary setObject:@"0x06" forKey:@"z"];//z

NSString *workwith = [_mess stringValue]; //Get String from Interface
long stringl = [workwith length]; //Get lenght of the String
int a = 0;
char text[stringl-1]; //make a array with the lenght of the string
while (a < stringl) { //fill this array with chars from the string
    text[a] = [workwith characterAtIndex:a];
    NSLog(@"%c",text[a]);
    a++;

}
char fmat[stringl-1]; //make a second char to fill it with keycodes
int dnehmen = 0;
while (dnehmen <= stringl-1) {
    fmat[dnehmen] = [dictionary objectForKey:@"%c",text[dnehmen]]; //stuck at this point

}

在最后一行,我尝试使用第一个数组中的char作为字典的id来获取第二个数组的键代码。 我得到一个错误,我不能使用char作为id,所以我需要一个是从char获取键码。 (我在这个网站上看了一些帖子,但我真的不明白他们做了什么) 谢谢你的回答 添

1 个答案:

答案 0 :(得分:0)

您报告的错误归结为以下行:

fmat[dnehmen] = [dictionary objectForKey:@"%c",text[dnehmen]];

由于使用了相当模糊的C逗号运算符,因为@"%c",text[dnehmen]不返回对象而是返回char值 - 逗号通常是分隔符,但也是运算符(如{{1}只返回它的第二个参数。所以你得到一个引用字符的错误......

鉴于您已使用+值作为键,您需要的是一个包含您的角色的字符串,您可能需要键入:

NSString

虽然这将解决您的第一个问题,但现在又有另一个问题,您的字典将返回包含四个字符的fmat[dnehmen] = [dictionary objectForKey:[NSString stringWithFormat:@"%c",text[dnehmen]]]; ,而您的代码建议您喜欢这四个字符所代表的字节(NSString)由编译器解释为十六进制文字...

此时您可能会试图通过将字符串解析为十六进制数来尝试将字符串转换为字节值,但您不应该这样做。而是首先考虑将您需要的值放入charNSDictionary中使用的任何键都可以是任何 [1]类型的对象。您可能需要考虑为两者使用NSDictionary个对象。

希望这会让您在修复设计方面走上正轨。

[1]嗯几乎任何准确的,任何具有相等和散列方法的东西 - 实际上是从NSNumber下降的所有内容所以不要担心这个迂腐的细节现在!