[luatex] fio library byte order
luigi scarso
luigi.scarso at gmail.com
Tue Jun 30 20:39:03 CEST 2020
On Tue, Jun 23, 2020 at 4:29 AM Henri Menke <henrimenke at gmail.com> wrote:
>
>
> No, type punning *is* undefined behaviour.
>
> 6.2.6.1 General
>
> 7 When a value is stored in a member of an object of union type, the
> bytes of the object representation that do not correspond to that
> member
> but do correspond to other members take unspecified values.
>
> http://port70.net/~nsz/c/c11/n1570.html#6.2.6.1p7
hm, unspecified value, not undefined behaviour.
Probably this one is ok:
\directlua{
ffi.cdef [[
unsigned int c ;
union endianess {
uint32_t i;
uint8_t c[sizeof(uint32_t)];
}
]]
local x = ffi.new('union endianess x',{i=0xAABBCCDD})
if ffi.sizeof('uint8_t')==1 and ffi.sizeof('uint32_t')==4 then
if(x.c[0]==0xDD and x.c[1]==0xCC and x.c[2]==0xBB and x.c[3]==0xAA) then
print "little endian"
elseif (x.c[0]==0xAA and x.c[1]==0xBB and x.c[2]==0xCC and x.c[3]==0xDD)
then
print "big endian"
else
print "mixed endian"
end
else
print "unable to check endianess"
end
}
\end
see eg Modern-C on unions
https://modernc.gforge.inria.fr/#orgd2172c0
--
luigi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://tug.org/pipermail/luatex/attachments/20200630/82d7a424/attachment.html>
More information about the luatex
mailing list.