Re: Hex string literals (was Re: C23 thoughts and opinions)

Liste des GroupesRevenir à cl c 
Sujet : Re: Hex string literals (was Re: C23 thoughts and opinions)
De : invalid (at) *nospam* invalid.invalid (Richard Kettlewell)
Groupes : comp.lang.c
Date : 17. Jun 2024, 11:41:03
Autres entêtes
Organisation : terraraq NNTP server
Message-ID : <wwva5jj4zsw.fsf@LkoBDZeT.terraraq.uk>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)
Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
Inspired by the existing syntax for integer and floating-point
hex constants, I propose using a "0x" prefix.  0x"deadbeef" is an
expression of type `const unsigned char[4]` (assuming CHAR_BIT==8),
with values 0xde, 0xad, 0xbe, 0xef in that order.  Byte order is
irrelevant; we're specifying byte values in order, not bytes of
the representation of some larger type.  memcpy()ing 0x"deadbeef"
to a uint32 might yield either 0xdeadbeef or uxefbeadde (or other
more exotic possibilities).

I like the syntax and I’d find it useful.

There’s more to life than byte arrays, though, so I wonder if there’s
more to be said here. I find myself dealing a lot with large integers
generally represented as arrays of some unsigned type (commonly uint32_t
but other possibilities arise too).

In C as it stands today this requires a translation step before
constants can be embedded in source code (which is error-prone if
someone attempts to do it manually).

So being able to say ‘0x8732456872648956348596893765836543 as array of
uint64_t, LSW first’ (in some suitably C-like syntax) would be a big
improvement from my perspective, primarily as an accelerator to
development but also as a small improvement in robustness.

Again, unlike other string literals, there is no implicit terminating
null byte.  And I suggest making them const, since there's no
existing code to break.
>
If CHAR_BIT==8, each byte is represented by two hex digits.  More
generally, each byte is represented by (CHAR_BIT+3)/4 hex digits in
the absence of whitespace.  Added whitespace marks the end of a byte,
0x"deadbeef" is 1, 2, 3, or 4 bytes if CHAR_BIT is 32, 16, 12, or 8
respectively, but 0x"de ad be ef" is 4 bytes regardless of CHAR_BIT.
0x"" is a syntax error, since C doesn't support zero-length arrays.
Anything between the quotes other than hex digits and spaces is a
syntax error.

Would "0x1 23 45 67" be a syntax error or { 0x1, 0x23, 0x45, 0x67 }?

What I'm trying to design here is a more straightforward way to
represent raw (unsigned char[]) data in C code, largely but not
exclusively for use by #embed.

Compilers can already implement #embed however they like, there’s no
need for a standardized way to represent the ‘inside’ of a #embed.

--
https://www.greenend.org.uk/rjk/

Date Sujet#  Auteur
14 Jun 24 * Re: C23 thoughts and opinions56Keith Thompson
14 Jun 24 +* Re: C23 thoughts and opinions12bart
15 Jun 24 i`* Re: C23 thoughts and opinions11David Brown
15 Jun 24 i `* Re: C23 thoughts and opinions10bart
15 Jun 24 i  +* Re: C23 thoughts and opinions5Lawrence D'Oliveiro
16 Jun 24 i  i`* Re: C23 thoughts and opinions4bart
16 Jun 24 i  i +- Re: C23 thoughts and opinions1Lawrence D'Oliveiro
16 Jun 24 i  i `* Re: C23 thoughts and opinions2Chris M. Thomasson
17 Jun 24 i  i  `- Re: C23 thoughts and opinions1Lawrence D'Oliveiro
16 Jun 24 i  `* Re: C23 thoughts and opinions4David Brown
16 Jun 24 i   `* Re: C23 thoughts and opinions3bart
17 Jun 24 i    +- Re: C23 thoughts and opinions1David Brown
17 Jun 24 i    `- Re: C23 thoughts and opinions1Michael S
15 Jun 24 +* Re: C23 thoughts and opinions3David Brown
15 Jun 24 i`* Re: C23 thoughts and opinions2Lawrence D'Oliveiro
16 Jun 24 i `- Re: C23 thoughts and opinions1David Brown
17 Jun 24 `* Hex string literals (was Re: C23 thoughts and opinions)40Keith Thompson
17 Jun 24  +* Re: Hex string literals (was Re: C23 thoughts and opinions)20David Brown
18 Jun 24  i+* Re: Hex string literals (was Re: C23 thoughts and opinions)18Keith Thompson
18 Jun 24  ii+* Re: Hex string literals (was Re: C23 thoughts and opinions)2Lawrence D'Oliveiro
18 Jun 24  iii`- Re: Hex string literals (was Re: C23 thoughts and opinions)1Keith Thompson
18 Jun 24  ii`* Re: Hex string literals (was Re: C23 thoughts and opinions)15David Brown
18 Jun 24  ii +* Re: Hex string literals (was Re: C23 thoughts and opinions)6Keith Thompson
19 Jun 24  ii i`* Re: Hex string literals (was Re: C23 thoughts and opinions)5David Brown
19 Jun 24  ii i `* Re: Hex string literals (was Re: C23 thoughts and opinions)4Kaz Kylheku
19 Jun 24  ii i  `* Re: Hex string literals (was Re: C23 thoughts and opinions)3Michael S
19 Jun 24  ii i   +- Re: Hex string literals (was Re: C23 thoughts and opinions)1bart
19 Jun 24  ii i   `- Re: Hex string literals (was Re: C23 thoughts and opinions)1Michael S
19 Jun 24  ii `* Re: Hex string literals (was Re: C23 thoughts and opinions)8Lawrence D'Oliveiro
19 Jun 24  ii  +* Re: Hex string literals (was Re: C23 thoughts and opinions)6David Brown
21 Jun 24  ii  i`* Re: Hex string literals (was Re: C23 thoughts and opinions)5Lawrence D'Oliveiro
21 Jun 24  ii  i +* Re: Hex string literals (was Re: C23 thoughts and opinions)3David Brown
21 Jun 24  ii  i i`* Re: Hex string literals (was Re: C23 thoughts and opinions)2Lawrence D'Oliveiro
22 Jun 24  ii  i i `- Re: Hex string literals (was Re: C23 thoughts and opinions)1David Brown
21 Jun 24  ii  i `- Re: Hex string literals (was Re: C23 thoughts and opinions)1James Kuyper
19 Jun 24  ii  `- Re: Hex string literals (was Re: C23 thoughts and opinions)1Keith Thompson
18 Jun 24  i`- Re: Hex string literals (was Re: C23 thoughts and opinions)1Lawrence D'Oliveiro
17 Jun 24  +* Re: Hex string literals (was Re: C23 thoughts and opinions)5Richard Kettlewell
17 Jun 24  i+- Re: Hex string literals (was Re: C23 thoughts and opinions)1Richard Kettlewell
18 Jun 24  i`* Re: Hex string literals (was Re: C23 thoughts and opinions)3Keith Thompson
18 Jun 24  i +- Re: Hex string literals (was Re: C23 thoughts and opinions)1Lawrence D'Oliveiro
18 Jun 24  i `- Re: Hex string literals (was Re: C23 thoughts and opinions)1Richard Kettlewell
17 Jun 24  `* Re: Hex string literals (was Re: C23 thoughts and opinions)14bart
18 Jun 24   +- Re: Hex string literals (was Re: C23 thoughts and opinions)1Keith Thompson
18 Jun 24   +* Re: Hex string literals (was Re: C23 thoughts and opinions)7Tim Rentsch
18 Jun 24   i`* Re: Hex string literals (was Re: C23 thoughts and opinions)6Michael S
18 Jun 24   i +* Re: Hex string literals (was Re: C23 thoughts and opinions)2bart
18 Jun 24   i i`- Re: Hex string literals (was Re: C23 thoughts and opinions)1Tim Rentsch
18 Jun 24   i +- Re: Hex string literals (was Re: C23 thoughts and opinions)1David Brown
18 Jun 24   i +- Re: Hex string literals (was Re: C23 thoughts and opinions)1Tim Rentsch
20 Jun 24   i `- Re: Hex string literals (was Re: C23 thoughts and opinions)1Lawrence D'Oliveiro
18 Jun 24   `* Re: Hex string literals (was Re: C23 thoughts and opinions)5Kaz Kylheku
18 Jun 24    `* Re: Hex string literals (was Re: C23 thoughts and opinions)4David Brown
18 Jun 24     `* Re: Hex string literals (was Re: C23 thoughts and opinions)3Richard Harnden
18 Jun 24      +- Re: Hex string literals (was Re: C23 thoughts and opinions)1Richard Harnden
21 Jun 24      `- Re: Hex string literals (was Re: C23 thoughts and opinions)1Lawrence D'Oliveiro

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal