Swift-da imzolangan suzishga qanday qilib aylantiriladi? Ijobiy son bilan yaxshi ishlaydi, lekin salbiy ishlamaydi

let hexString = "0x42f9b6c9"
let toInt = Int32(truncatingBitPattern: strtoul(self, nil, 16))
let toFloat = Float(bitPattern: UInt32(self))

Natija: 124.857

let hexString = "0xc2f9b6c9"
let toInt = Int32(truncatingBitPattern: strtoul(self, nil, 16))
let toFloat = Float(bitPattern: UInt32(self))

ilova bu erda quladi, chunki qiymati salbiy, kutilgan natijalar -124.857

Iltimos yordam bering. Rahmat!

1

6 javoblar

strtoul means string to unsigned long. Try strtol

1
qo'shib qo'ydi
Bundan tashqari, UInt32 da "U" "unsigned" degan ma'noni anglatadi.
qo'shib qo'ydi muallif creeperspeak, manba
@user Shuningdek, Int32 ni ishlatish o'rniga UInt32 (truncatingBitPattern: ... ) ni aytishingiz kerak.
qo'shib qo'ydi muallif Hamish, manba
Haqiqatan ham? Hurmat bilan, men doimo Unicode degan fikrdaman. Har kuni yangi narsa o'rganing. Rahmat! (Va ha, endi, men aslida, deb o'ylayman, Unikod orasidagi farq nima va nima uchun bo'lar edi unicode Int mean?)
qo'shib qo'ydi muallif dfd, manba
Rahmat qilaman :) Lekin siz uni qanday imzolashni bilasizmi?
qo'shib qo'ydi muallif user, manba

strtoul means string to unsigned long. Try strtol

1
qo'shib qo'ydi
Bundan tashqari, UInt32 da "U" "unsigned" degan ma'noni anglatadi.
qo'shib qo'ydi muallif creeperspeak, manba
@user Shuningdek, Int32 ni ishlatish o'rniga UInt32 (truncatingBitPattern: ... ) ni aytishingiz kerak.
qo'shib qo'ydi muallif Hamish, manba
Haqiqatan ham? Hurmat bilan, men doimo Unicode degan fikrdaman. Har kuni yangi narsa o'rganing. Rahmat! (Va ha, endi, men aslida, deb o'ylayman, Unikod orasidagi farq nima va nima uchun bo'lar edi unicode Int mean?)
qo'shib qo'ydi muallif dfd, manba
Rahmat qilaman :) Lekin siz uni qanday imzolashni bilasizmi?
qo'shib qo'ydi muallif user, manba

strtoul means string to unsigned long. Try strtol

1
qo'shib qo'ydi
Bundan tashqari, UInt32 da "U" "unsigned" degan ma'noni anglatadi.
qo'shib qo'ydi muallif creeperspeak, manba
@user Shuningdek, Int32 ni ishlatish o'rniga UInt32 (truncatingBitPattern: ... ) ni aytishingiz kerak.
qo'shib qo'ydi muallif Hamish, manba
Haqiqatan ham? Hurmat bilan, men doimo Unicode degan fikrdaman. Har kuni yangi narsa o'rganing. Rahmat! (Va ha, endi, men aslida, deb o'ylayman, Unikod orasidagi farq nima va nima uchun bo'lar edi unicode Int mean?)
qo'shib qo'ydi muallif dfd, manba
Rahmat qilaman :) Lekin siz uni qanday imzolashni bilasizmi?
qo'shib qo'ydi muallif user, manba

strtoul means string to unsigned long. Try strtol

1
qo'shib qo'ydi
Bundan tashqari, UInt32 da "U" "unsigned" degan ma'noni anglatadi.
qo'shib qo'ydi muallif creeperspeak, manba
@user Shuningdek, Int32 ni ishlatish o'rniga UInt32 (truncatingBitPattern: ... ) ni aytishingiz kerak.
qo'shib qo'ydi muallif Hamish, manba
Haqiqatan ham? Hurmat bilan, men doimo Unicode degan fikrdaman. Har kuni yangi narsa o'rganing. Rahmat! (Va ha, endi, men aslida, deb o'ylayman, Unikod orasidagi farq nima va nima uchun bo'lar edi unicode Int mean?)
qo'shib qo'ydi muallif dfd, manba
Rahmat qilaman :) Lekin siz uni qanday imzolashni bilasizmi?
qo'shib qo'ydi muallif user, manba

Stringni kengaytirish uchun yaxshiroq

extension String {
func hexToFloat() -> Float {
    var toInt = Int32(truncatingBitPattern: strtol(self, nil, 16))
    var float:Float32!
    memcpy(&float, &toInt, MemoryLayout.size(ofValue: float))
    print("\(float)")
    return float
}

}

Misol

"0xc2f9b6c9".hexToFloat()
//-124.857
"0x41240000".hexToFloat()
//10.25
0
qo'shib qo'ydi

Stringni kengaytirish uchun yaxshiroq

extension String {
func hexToFloat() -> Float {
    var toInt = Int32(truncatingBitPattern: strtol(self, nil, 16))
    var float:Float32!
    memcpy(&float, &toInt, MemoryLayout.size(ofValue: float))
    print("\(float)")
    return float
}

}

Misol

"0xc2f9b6c9".hexToFloat()
//-124.857
"0x41240000".hexToFloat()
//10.25
0
qo'shib qo'ydi