gpt4 book ai didi

iphone - 如何将 NSString 转换为十六进制值

转载 作者:太空狗 更新时间:2023-10-30 03:09:46 33 4
gpt4 key购买 nike

我想将常规 NSString 转换为具有(我假设的)ASCII 十六进制值并返回的 NSString。

我需要生成与下面的 Java 方法相同的输出,但我似乎找不到在 Objective-C 中执行此操作的方法。我在 C 和 C++ 中找到了一些示例,但我很难将它们应用到我的代码中。

以下是我尝试重现的 Java 方法:

/**
* Encodes the given string by using the hexadecimal representation of its UTF-8 bytes.
*
* @param s The string to encode.
* @return The encoded string.
*/
public static String utf8HexEncode(String s) {
if (s == null) {
return null;
}
byte[] utf8;
try {
utf8 = s.getBytes(ENCODING_UTF8);
} catch (UnsupportedEncodingException x) {
throw new RuntimeException(x);
}
return String.valueOf(Hex.encodeHex(utf8));
}

/**
* Decodes the given string by using the hexadecimal representation of its UTF-8 bytes.
*
* @param s The string to decode.
* @return The decoded string.
* @throws Exception If an error occurs.
*/
public static String utf8HexDecode(String s) throws Exception {
if (s == null) {
return null;
}
return new String(Hex.decodeHex(s.toCharArray()), ENCODING_UTF8);
}

更新:感谢 drawonward 的回答,这里是我编写的创建十六进制 NSString 的方法。它在 char 声明行上给我一个“初始化丢弃指针目标类型的限定符”警告,但它有效。

- (NSString *)stringToHex:(NSString *)string
{
char *utf8 = [string UTF8String];
NSMutableString *hex = [NSMutableString string];
while ( *utf8 ) [hex appendFormat:@"%02X" , *utf8++ & 0x00FF];

return [NSString stringWithFormat:@"%@", hex];
}

还没来得及写解码方法。当我这样做时,我将对其进行编辑以将其发布给其他感兴趣的人。

Update2:所以我上面贴的方法实际上并没有输出我要找的东西。它不是以 0-f 格式输出十六进制值,而是输出所有数字。我终于重新开始处理这个问题,并且能够为 NSString 编写一个类别,它完全复制了我发布的 Java 方法。在这里:

//
// NSString+hex.h
// Created by Ben Baron on 10/20/10.
//

@interface NSString (hex)

+ (NSString *) stringFromHex:(NSString *)str;
+ (NSString *) stringToHex:(NSString *)str;

@end

//
// NSString+hex.m
// Created by Ben Baron on 10/20/10.
//

#import "NSString+hex.h"

@implementation NSString (hex)

+ (NSString *) stringFromHex:(NSString *)str
{
NSMutableData *stringData = [[[NSMutableData alloc] init] autorelease];
unsigned char whole_byte;
char byte_chars[3] = {'\0','\0','\0'};
int i;
for (i=0; i < [str length] / 2; i++) {
byte_chars[0] = [str characterAtIndex:i*2];
byte_chars[1] = [str characterAtIndex:i*2+1];
whole_byte = strtol(byte_chars, NULL, 16);
[stringData appendBytes:&whole_byte length:1];
}

return [[[NSString alloc] initWithData:stringData encoding:NSASCIIStringEncoding] autorelease];
}

+ (NSString *) stringToHex:(NSString *)str
{
NSUInteger len = [str length];
unichar *chars = malloc(len * sizeof(unichar));
[str getCharacters:chars];

NSMutableString *hexString = [[NSMutableString alloc] init];

for(NSUInteger i = 0; i < len; i++ )
{
[hexString appendString:[NSString stringWithFormat:@"%x", chars[i]]];
}
free(chars);

return [hexString autorelease];
}

@end

最佳答案

将 nsstring 转换为十六进制值的完美而简短的方法

NSMutableString *tempHex=[[NSMutableString alloc] init];

[tempHex appendString:@"0xD2D2D2"];

unsigned colorInt = 0;

[[NSScanner scannerWithString:tempHex] scanHexInt:&colorInt];

lblAttString.backgroundColor=UIColorFromRGB(colorInt);

这段代码使用的宏是----

#define UIColorFromRGB(rgbValue) 
[UIColor \colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

关于iphone - 如何将 NSString 转换为十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3056757/

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