Data.copyBytes will do that under the hood
var crc: UInt16 = 0
let amountCopied = withUnsafeMutablePointer(to: &crc) { data.copyBytes(to:
UnsafeMutableBufferPointer(start: $0, count: 1)) }
if amountCopied == MemoryLayout<UInt16>.size {
// we have a full crc
}
That will probably do what you want; plus it will allow you to do it from a
given range of bytes.
> On Jun 26, 2017, at 9:57 AM, Joe Groff via swift-users
> <[email protected]> wrote:
>
>
>> On Jun 26, 2017, at 1:55 AM, Daniel Vollmer via swift-users
>> <[email protected]> wrote:
>>
>> Hi Rick,
>>
>>> On 26. Jun 2017, at 02:37, Rick Mann via swift-users
>>> <[email protected]> wrote:
>>
>> [snip]
>>
>>> I'd also like to avoid unnecessary copying of the data. All of it is
>>> immutable for the purposes of this problem.
>>>
>>> How can I get the UInt16 that starts at byte X in a Data? Same goes for
>>> Double or Int32 or whatever.
>>
>> I’m not sure what Swift’s stance on this is, but not all platforms allow
>> misaligned memory accesses (such as your attempt to access a UInt16 that
>> lies at an odd memory address).
>
> Unaligned memory accesses are not currently allowed by the language
> semantics, regardless of the underlying ISA. You should use memcpy if you
> need to load potentially-unaligned values out of raw memory.
>
> -Joe
> _______________________________________________
> swift-users mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users