java double 转 byte数组_如何快速将double转换为字节数组?

小编典典

typealias Byte = UInt8

func toByteArray(var value: T) -> [Byte] {

return withUnsafePointer(&value) {

Array(UnsafeBufferPointer(start: UnsafePointer($0), count: sizeof(T)))

}

}

toByteArray(1729.1729)

toByteArray(1729.1729 as Float)

toByteArray(1729)

toByteArray(-1729)

但是结果与您的期望相反(由于字节顺序):

[234, 149, 178, 12, 177, 4, 155, 64]

[136, 37, 216, 68]

[193, 6, 0, 0, 0, 0, 0, 0]

[63, 249, 255, 255, 255, 255, 255, 255]

添加:

func fromByteArray(value: [Byte], _: T.Type) -> T {

return value.withUnsafeBufferPointer {

return UnsafePointer($0.baseAddress).memory

}

}

let a: Double = 1729.1729

let b = toByteArray(a) // -> [234, 149, 178, 12, 177, 4, 155, 64]

let c = fromByteArray(b, Double.self) // -> 1729.1729

对于Xcode8 / Swift3.0:

func toByteArray(_ value: T) -> [UInt8] {

var value = value

return withUnsafePointer(to: &value) {

$0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size) {

Array(UnsafeBufferPointer(start: $0, count: MemoryLayout.size))

}

}

}

func fromByteArray(_ value: [UInt8], _: T.Type) -> T {

return value.withUnsafeBufferPointer {

$0.baseAddress!.withMemoryRebound(to: T.self, capacity: 1) {

$0.pointee

}

}

}

对于Xcode8.1 / Swift3.0.1

func toByteArray(_ value: T) -> [UInt8] {

var value = value

return withUnsafeBytes(of: &value) { Array($0) }

}

func fromByteArray(_ value: [UInt8], _: T.Type) -> T {

return value.withUnsafeBytes {

$0.baseAddress!.load(as: T.self)

}

}

2020-07-07

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值