in reply to Re^59: Interleaving bytes in a string quickly
in thread Interleaving bytes in a string quickly

No. Neither Perl nor C uses the term "byte" to refer to a class of (unsigned) integers. A byte is the minimal addressable unit of memory. For the vast majority of modern, non-specialist cpus, that means 8-bits. And an 8 bit byte can vaiously contain unsigned integers 0-255, or signed integers -127-127, or 8 discrete boolean values.

Wikipedia says: The byte ... is an ordered collection of bits, in which each bit denotes the binary value of 1 or 0. The size of a byte is typically hardware dependent, but the modern de facto standard is 8 bits, as this is a convenient power of 2.

perlunicode says: Beginning with version 5.6, Perl uses logically-wide characters to represent strings internally. In future, Perl-level operations will be expected to work with characters rather than bytes. ... Under character semantics, many operations that formerly operated on bytes now operate on characters.

It makes a whole lot more sense than "a byte can be stored in 1 byte or it can be stored in multiple bytes. But when it is stored in multiple bytes it is still just 1 byte". Of course, you'll probably start talking about that pretentious term 'octet' coined to be unambiguous, but unless your using a 12-bit or 40 bit dsp, there is no ambiguity. And if you are, the term octet is meaningless.

  • Comment on Re^60: Interleaving bytes in a string quickly

Replies are listed 'Best First'.
Re^61: Interleaving bytes in a string quickly
by ikegami (Patriarch) on Mar 04, 2010 at 17:19 UTC

    Wikipedia says: The byte ... is an ordered collection of bits, in which each bit denotes the binary value of 1 or 0. The size of a byte is typically hardware dependent, but the modern de facto standard is 8 bits, as this is a convenient power of 2.

    I am referring to an ordered collection of 8 bits.

    And an 8 bit byte can vaiously contain unsigned integers 0-255, or signed integers -127-127, or 8 discrete boolean values.

    Or 8 bits of a stream of HDMI information, as is the case here.

    Thanks for the quotes. They said it much better than I did. You're trying to tell me that a byte of HDMI info on disk is suddenly not a byte of HDMI info if I place it in a Perl var, and that doesn't fly.

      I am referring to an ordered collection of 8 bits.

      No you weren't. How can an ordered collection of 8-bits be "just stored differently"?

      $_ = "\x80\x81"; # Value is bytes 80 81 utf8::upgrade($_); # Value is still bytes 80 81, # just stored differently.

        Bits 1-0-0-0-0-0-0-0-1-0-0-0-0-0-0-1. How many examples do you want? Here are three for the first byte:

        $byte = 0x80; $byte = "\x80"; @byte = (1,0,0,0,0,0,0,0);

        (They respectively take 16, 36 and 128 bytes to store that one byte.)

Re^61: Interleaving bytes in a string quickly
by IBlowGoatsSucker (Beadle) on Mar 04, 2010 at 17:59 UTC
    A reply falls below the community's threshold of quality. You may see it by logging in.