我在实现将十六进制值(小端)转换为十进制值的函数时遇到了困难。
所以我正在写函数:
func convertHexLittleEndianToDeciaml(input:String) -> (int)
和输入总是4个字节(因此输入字符串中有8个字符)
<{1}}的值应返回convertHexLittleEndianToDeciaml("606d0000")
答案 0 :(得分:3)
你可以这样写: (见更新)
// container element
var e = document.createElement('div');
// child element with class 'large button 1 jackson'
e.innerHTML = '<div class="large button 1 jackson">some text</div>';
// insert the container element
document.body.appendChild(e);
// new element
var newElem = document.createElement('textarea');
// find a element with jackson class (using .jackson as selector)
var jackson = e.querySelector('.jackson');
// insert new element
jackson.appendChild(newElem);
<强>更新强>
很抱歉,但上面的代码有一些溢出问题,就像“FF010000”:
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
<强> UPDATE2 强>
因此,我发现在错误情况下返回有效的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
}
}
可能会导致无法轻易找到的错误。我建议你将返回类型更改为Optional,并在错误的情况下返回nil。
Int32
答案 1 :(得分:0)
这是一个适用于我写的较长数字的解决方案:
func convert(number: String) -> Int {
var formatted = number
if number.count <= 16 {
let difference = 16 - number.count
for _ in 0..<difference {
formatted.append("0")
}
} else {
return 0
}
let value = UInt64(formatted, radix: 16) ?? 0
let z = value.byteSwapped
let final = UInt64(bitPattern: Int64(z))
return Int(final)
}