功能HEX
是sqlite
我想从我的objective-c代码中调用该函数,而不是在我的应用程序中实际创建数据库..等等。
用最少的类添加函数来调用函数最简单的方法是什么?
我发现很多用o-c写的函数都是HEX一个字符串。但是,它们不正确,因为它们产生的结果与mysql的HEX函数不同。
解决方案:将字符串转换为其十六进制值
+(NSString *) stringToHex:(NSString *)str
{
NSString *aResult;
sqlite3 *database;
if(sqlite3_open(":memory:", &database) == SQLITE_OK)
{
NSString *sqlStatement = [NSString stringWithFormat:@"select HEX('%@')",str];
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, [sqlStatement cStringUsingEncoding:NSUTF8StringEncoding], -1, &compiledStatement, NULL) == SQLITE_OK) {
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
aResult = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
}
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
return aResult;
}
答案 0 :(得分:1)
您可以使用sqlite3_open打开内存中的数据库并使用它。为此,请打开文件名为:memory:
(带冒号)的数据库。
如果您只想要hex函数,还可以查看SQLite的源代码。它是普通的C和公共领域。
答案 1 :(得分:1)
您可以从NSDate实例轻松检索HEX字符串:
NSString *tokenKey = [[[deviceToken description] stringByTrimmingCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"<>"]]
stringByReplacingOccurrencesOfString:@" " withString:@""];
答案 2 :(得分:1)
听起来你只想将NSString转换为十六进制。你可以在这里搜索一个更好的解决方案,或者这是我刚设计的一个:
+ (NSString *)stringToHex:(NSString *)string
{
NSUInteger hexLength = ([string length] * 2) + 1;
char *hex = (char *)malloc(sizeof(char) * hexLength);
if (hex == NULL)
return (@"");
const char *cString = [string cStringUsingEncoding:NSASCIIStringEncoding];
for (NSUInteger len = 0, pos = 0; len < [string length]; len++, pos += 2)
snprintf(hex + pos, 3, "%2x", cString[len]);
hex[hexLength] = '\0';
NSString *hexString = [NSString stringWithCString:hex encoding:NSASCIIStringEncoding];
if (hex != NULL)
free(hex);
return (hexString);
}