특정 문자열을 UUID 포멧 문자열로 바꿔야하는 경우가 있다. 이런경우 NSString과 CBUUID간 변환이 용이해야 한다. 만약 특정 문자열이 길이가 uuid포멧 길이보다 작다면 uuid포멧 빈 공간에 ' '을 채워서 생성되도록 만들어 보았다.
NSString -> CBUUID
NSString *string = [@"233R194013780790" toUUID];
CBUUID *uuid = [CBUUID UUIDWithString:string];
CBUUID -> NSString
// 32333352-3139-3430-3133-373830373930
NSString *uuidString = [uuid representativeString];
NSLog(@"%@", uuidString);
// 233R194013780790
NSString *tid = [uuid toString];
NSLog(@"%@", tid);
::: 관련함수 :::
// String to Hexadecimal String
-(NSString *)toHex {
char *utf8 = (char *)[self UTF8String];
NSMutableString *hex = [NSMutableString string];
while ( *utf8 ) {
[hex appendFormat:@"%02X" , *utf8++ & 0x00FF];
}
return [NSString stringWithFormat:@"%@", hex];
}
// Hexadecimal String to NSData
-(NSData *)hex2Data {
NSMutableData *stringData = [[NSMutableData alloc] init];
unsigned char whole_byte;
char byte_chars[3] = {'\0','\0','\0'};
int i;
for (i=0; i < [self length] / 2; i++) {
byte_chars[0] = [self characterAtIndex:i*2];
byte_chars[1] = [self characterAtIndex:i*2+1];
whole_byte = strtol(byte_chars, NULL, 16);
[stringData appendBytes:&whole_byte length:1];
}
return stringData;
}
-(CBUUID *)toCBUUID {
if (NO == [self isValidUUID]) {
NSLog(@"포멧 비정상.");
return nil;
}
return [CBUUID UUIDWithString:self];
}
// uuid 포멧 검증
-(BOOL)isValidUUID {
return (BOOL)[[NSUUID alloc] initWithUUIDString:self];
}
// 문자열을 hex로 변경한뒤 UUID포멧으로 변경
-(NSString *)toUUID {
NSString *string = self;
if (string.length < 16) {
NSString *spaceString = @"";
for (NSInteger i=0; i<(16 - string.length); ++i) {
spaceString = [spaceString stringByAppendingString:@" "];
}
// 길이가 작을 경우 뒤쪽에 공백추가
string = [NSString stringWithFormat:@"%@%@", self, spaceString];
}
NSData *data = [string toData];
NSUInteger bytesToConvert = [data length];
const unsigned char *uuidBytes = [data bytes];
NSMutableString *outputString = [NSMutableString stringWithCapacity:16];
for (NSUInteger currentByteIndex = 0; currentByteIndex < bytesToConvert; currentByteIndex++) {
switch (currentByteIndex) {
case 3:
case 5:
case 7:
case 9:[outputString appendFormat:@"%02X-", uuidBytes[currentByteIndex]]; break;
default:[outputString appendFormat:@"%02X", uuidBytes[currentByteIndex]];
}
}
return outputString;
}
-(NSData *)toData {
NSData *nsData = [self dataUsingEncoding:NSUTF8StringEncoding];
return nsData;
}
2020/06/03 - [iOS/Swift] - 위치서비스(location service) 활성화 여부 체크
2020/06/02 - [개발노트] - Luhn 알고리즘
2020/06/01 - [iOS/Swift] - The Ultimate Guide to WKWebView
2020/06/01 - [iOS/Tips] - WKWebView에서 로컬 웹 파일 및 리소스 로드
2020/06/01 - [iOS/Tips] - WKWebView
2020/05/29 - [iOS/Swift] - 네비게이션바 투명 처리
2020/05/29 - [개발툴/Xcode] - NFC Xcode 설정
2020/05/29 - [개발노트] - NFC (Near Field Communication)
2020/05/29 - [개발노트] - NFC Tag 저장용량
2020/05/29 - [iOS/Swift] - 클로저(Closure)
2020/05/29 - [개발노트] - QR 코드 결제 타입
2020/05/29 - [iOS/Objective-C] - Objective-C Block Syntax
2020/05/29 - [iOS/Objective-C] - Detect permission of camera in iOS
'개발 > iOS' 카테고리의 다른 글
SEED 블록암호 알고리즘 CBC (Cipher Block Chaining) 예제 (2/2) (0) | 2020.07.11 |
---|---|
Fridump 사용법 (4/4) - 결과물 바이너리 검색 (0) | 2020.06.12 |
위치서비스(location service) 활성화 여부 체크 (0) | 2020.06.03 |
The Ultimate Guide to WKWebView (0) | 2020.06.01 |
WKWebView에서 로컬 웹 파일 및 리소스 로드 (0) | 2020.06.01 |