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

It's calling a string containing multi-byte characters, a character string.

No, you used it to denote both multi and single byte character formats.

Because there is no +1 in my code, and the only assignment of \0 is into the output buffer

You asked how to construct a var without a \0. I used an example from your own code, the construction of the output buffer. The +1 is done for you by SvPV.

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

Replies are listed 'Best First'.
Re^54: Interleaving bytes in a string quickly
by Anonymous Monk on Mar 03, 2010 at 16:01 UTC
    No. He didn't.

      "80 81" and "80 81 00" use the single byte format. "C2 80 C2 81" and "C2 80 C2 81 00" use the multi byte format.

      He even said it himself that those aren't all the same format: "You still haven't demonstrated how you can get those four to exist with only two string types".

      All four is the same byte string. Calling any of them character string is weird. Calling all of them character string makes no sense.

        That's not a demonstration.

        So, what you are really saying here, finally, is that there are not 4 possibilities, but only two. Because the terminating null bytes are unavoidable and not part of the Perl data.

        And of those two possibilities

        One, starts life in perl as a string containing just two values, and ends up in C as a char array containing just two values.

        And those values are single bytes in both cases. Eg. A byte string in Perl and a char array in C.

        The other starts life in perl as a string containing two values, but ends up in C as a char array containing four values.

        This because the values in the perl string are multi-bytes characters. Two bytes each in this case. Eg. A character string in Perl, and a char array in C.

        I'd call that vindication of Buk's position. And all it took was 57 levels of exchanges for you to get around to admitting it.