당신이 뭔가를 쓸 수 있습니다 like : (업데이트 참조)
func convertHexLittleEndianToDeciaml(input:String) -> Int32 {
if let beValue = Int32(input, radix: 16) where input.characters.count == 8 {
return beValue.byteSwapped
} else {
//or `fatalError()` or `return 0` or ...
return Int32.min
}
}
print(convertHexLittleEndianToDeciaml("606d0000")) //->28000
UPDATE
미안하지만, 위의 코드는 약간의 오버 플로우 문제를 가지고는, "FF010000"와 같은 뭔가 발생합니다
func convertHexLittleEndianToDeciaml(input:String) -> Int32 {
if let beValue = UInt32(input, radix: 16) where input.characters.count == 8 {
return Int32(bitPattern: beValue.byteSwapped)
} else {
//or `fatalError()` or `return 0` or ...
return Int32.min
}
}
UPDATE2 그래서
, 나는 발견했다 오류 케이스에 유효한 Int32
을 반환하면 쉽게 발견 할 수없는 버그가 발생할 수 있습니다. 반환 유형을 Optional로 변경하고 오류가없는 경우 nil을 반환하는 것이 좋습니다.
func convertHexLittleEndianToDeciaml(input:String) -> Int32? {
guard let beValue = UInt32(input, radix: 16) where input.characters.count == 8 else {
return nil
}
return Int32(bitPattern: beValue.byteSwapped)
}
if let value = convertHexLittleEndianToDeciaml("606d0000") {
print(value) //->28000
} else {
print("Hex format invalid")
}
6d60은 28,000이 아니라 십진법으로 28,000입니다. – WMios
그리고 어떻게 되나요? 우리에게 코드를 보여주고 실패한 곳을 알려주십시오. – Losiowaty
입력이 문자열이 아닌 Int 인 이유는 무엇입니까? – Alexander