> On Jun 26, 2017, at 10:20 , Charles Srstka <[email protected]> wrote:
>
> Rats, I was hoping that one of the reasons about being so explicit what we’re
> going to access and where with bindMemory() and friends would be to take care
> of these sorts of issues.
>
> In that case, the simplest way to do it is probably just this:
>
> let crc = (UInt16(myData[myData.endIndex]) << 8) |
> UInt16(myData[myData.endIndex - 1])
>
> (or the reverse, depending on the endianness of the source data)
Ah. I was doing it like this, but I guess I don't really need to, do I?
let count = self.count
let ourCRC = self.withUnsafeBytes
{ (inPtr: UnsafePointer<UInt8>) -> UInt16 in
let b1 = UInt16(inPtr[count - 2])
let b2 = UInt16(inPtr[count - 1])
let b = (b1 << 8) | b2
return b
}
>
> Charles
>
>> On Jun 26, 2017, at 12:05 PM, Philippe Hausler via swift-users
>> <[email protected]> wrote:
>>
>> 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
>>
>
--
Rick Mann
[email protected]
_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users