NSScanner

NSScanner : NSObject

函数、方法、属性

/** 获取被扫描的字符串 */
@property (readonly, copy) NSString *string;
/** 扫描的位置 */
@property NSUInteger scanLocation;
/** 需要忽略的字符 */
@property (nullable, copy) NSCharacterSet *charactersToBeSkipped;
/** 是否区分大小写 */
@property BOOL caseSensitive;
/** ?? */
@property (nullable, retain) id locale;
/**
 初始化Scanner对象
 @param string 要进行扫描的词
 @return Scanner
 */
- (instancetype)initWithString:(NSString *)string NS_DESIGNATED_INITIALIZER;

使用

NSString * result = nil;
NSScanner * scanner = [[NSScanner alloc] initWithString:@"123abc~!@챠처쳐초쵸"];
int value;
scanner.charactersToBeSkipped = [NSCharacterSet characterSetWithCharactersInString:@"a"];
scanner.scanLocation = 0;
while (![scanner isAtEnd]) {
    // 扫描到的字符是整型
    if ([scanner scanInt:&value]) {
        NSLog(@"%d, %lu",value,(unsigned long)scanner.scanLocation);
        continue;
    }
    // 扫描到ab字符
    else if ([scanner scanString:@"ab" intoString:&result]) {
        NSLog(@"%@, %lu", result, (unsigned long)scanner.scanLocation);
        continue;
    }
    // 其他情况让扫描的位置向前一一位
    else {
        scanner.scanLocation++;
    }
}

NSScanner (NSExtendedScanner)

/**
 扫描Int
 @param result 使用Int接收扫描到的字符串
 @return 是否扫描到
 */
- (BOOL)scanInt:(nullable int *)result;
/**
 扫描NSInteger
 @param result 使用NSInteger接收扫描到的字符串
 @return 是否扫描到
 */
- (BOOL)scanInteger:(nullable NSInteger *)result;
/**
 扫描long long
 @param result 使用long long接收扫描到的字符串
 @return 是否扫描到
 */
- (BOOL)scanLongLong:(nullable long long *)result;
/**
 扫描unsigned long long
 @param result 使用unsigned long long接收扫描到的字符串
 @return 是否扫描到
 */
- (BOOL)scanUnsignedLongLong:(nullable unsigned long long *)result;
/**
 扫描float
 @param result 使用float接收扫描到的字符串
 @return 是否扫描到
 */
- (BOOL)scanFloat:(nullable float *)result;
/**
 扫描double
 @param result 使用double接收扫描到的字符串
 @return 是否扫描到
 */
- (BOOL)scanDouble:(nullable double *)result;
/**
 扫描十六进制(可选以“0x”或“0x”为前缀)
 @param result 使用unsigned接收扫描到的字符串转换为十进制
 @return 是否扫描到
 */
- (BOOL)scanHexInt:(nullable unsigned *)result;
/**
 扫描十六进制(可选以“0x”或“0x”为前缀)
 @param result 使用unsigned long long接收扫描到的字符串转换为十进制
 @return 是否扫描到
 */
- (BOOL)scanHexLongLong:(nullable unsigned long long *)result;
/**
 扫描十六进制(对应于%a或%A格式。需要“0x”或“0x”前缀)
 @param result 使用float接收扫描到的字符串转换为十进制
 @return 是否扫描到
 */
- (BOOL)scanHexFloat:(nullable float *)result;
/**
 扫描十六进制(对应于%a或%a格式。需要“0x”或“0x”前缀)
 @param result 使用double接收扫描到的字符串转换为十进制
 @return 是否扫描到
 */
- (BOOL)scanHexDouble:(nullable double *)result;
/**
 扫描字符串(对应于%a或%a格式。需要“0x”或“0x”前缀)
 @param result 使用double接收扫描到的字符串转换为十进制
 @return 是否扫描到
 */
/**
 扫描字符串
 @param string 要扫描的字符串
 @param result 扫描到的字符串
 @return 是否扫描到
 */
- (BOOL)scanString:(NSString *)string
        intoString:(NSString * _Nullable * _Nullable)result;
/**
 扫描字符串
 @param set 要扫描的C字符
 @param result 扫描到的字符串
 @return 是否扫描到
 */
- (BOOL)scanCharactersFromSet:(NSCharacterSet *)set
                   intoString:(NSString * _Nullable * _Nullable)result;
/**
 扫描字符串
 @param string 要扫描的字符串
 @param result 扫描到的字符串和它前面的字符串
               但是如果前面有部分字符串被其他扫描方式扫描过,则不会保留被扫描的部分
 @return 是否扫描到
 */
- (BOOL)scanUpToString:(NSString *)string
            intoString:(NSString * _Nullable * _Nullable)result;
/**
 扫描字符串
 @param string 要扫描的C字符
 @param result 扫描到的字符串和它前面的字符串
               但是如果前面有部分字符串被其他扫描方式扫描过,则不会保留被扫描的部分
 @return 是否扫描到
 */
- (BOOL)scanUpToCharactersFromSet:(NSCharacterSet *)set
                       intoString:(NSString * _Nullable * _Nullable)result;
/** 是否扫描完毕 */
@property (getter=isAtEnd, readonly) BOOL atEnd;
/** 便利构造 */
+ (instancetype)scannerWithString:(NSString *)string;
+ (id)localizedScannerWithString:(NSString *)string;
帮助我解释代码的逻辑 |// // LMVRKEBitmapParser.m // LMVInsensibilityBlueToothKey // // Created by van on 2025/9/24. // #import "LMVRKEBitmapParser.h" @implementation LMVRKEBitmapParser - (instancetype)initWithBitmapValue:(uint64_t)bitmapValue { self = [super init]; if (self) { _bitmapValue = bitmapValue; } return self; } - (instancetype)initWithHexString:(NSString *)hexString { self = [super init]; if (self) { _bitmapValue = [self parseHexString:hexString]; } return self; } #pragma mark - 解析方法 /// 解析16进制进制字符串 - (uint64_t)parseHexString:(NSString *)hexString { // 移除可能的前缀和空格 NSString *cleanHexString = [hexString stringByReplacingOccurrencesOfString:@"0x" withString:@""]; cleanHexString = [cleanHexString stringByReplacingOccurrencesOfString:@"0X" withString:@""]; cleanHexString = [cleanHexString stringByReplacingOccurrencesOfString:@" " withString:@""]; // 确保长度不超过16个字符 if (cleanHexString.length > 16) { cleanHexString = [cleanHexString substringToIndex:16]; } // 使用NSScanner转换 NSScanner *scanner = [NSScanner scannerWithString:cleanHexString]; uint64_t result = 0; [scanner scanHexLongLong:&result]; return result; } #pragma mark - 查询方法 - (BOOL)isFunctionEnabledAtBit:(NSUInteger)bitPosition { if (bitPosition >= 64) { return NO; } return (self.bitmapValue & ((uint64_t)1 << bitPosition)) != 0; } - (NSInteger)fetchBitForControlType:(LMVInsensibilityBluetooth_ControlType)controlType { switch (controlType) { case LMVInsensibilityBluetooth_WindowControl: return 3; case LMVInsensibilityBluetooth_FrunkControl: return 4; case LMVInsensibilityBluetooth_TrunkControl: return 5; case LMVInsensibilityBluetooth_Honks: return 6; case LMVInsensibilityBluetooth_RightSlidingDoor: return 7; case LMVInsensibilityBluetooth_LeftSlidingDoor: return 8; default: return 0; } } @end
最新发布
09-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值