多字节字符的存储顺序
LLVM C11
//
// main.c
// test
//
// Created by cbd on 01/01/2017.
// Copyright © 2017 cbd. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
int main(int argc, const char * argv[]) {
char * smile = "😊abcd好";
printf("%s", smile);
puts("\n从右向左:");
for (int i=(int)strlen(smile) - 1; i>=0; i--) {
printf("%hhX\t", smile[i]);
}
puts("\n从左向右:");
for (int i = 0; i < strlen(smile); i++) {
printf("%hhX\t", smile[i]);
}
puts("\n低四byte:");
printf("%X", *(unsigned int *)smile);
puts("\n中四byte:");
printf("%X", *(unsigned int *)(smile+4));
puts("\n高四byte:");
printf("%X", *(unsigned int *)(smile+8));
int x = getchar();
return EXIT_SUCCESS;
}
output:
😊abcd好
从右向左:
BD A5 E5 64 63 62 61 8A 98 9F F0
从左向右:
F0 9F 98 8A 61 62 63 64 E5 A5 BD
低四byte:
8A989FF0
中四byte:
64636261
高四byte:
BDA5E5
『😊』的utf8编码为F09F988A。
『好』的utf8编码为E5A5BD。
abcd的utf8与ascii兼容,为61 62 63 64 。
每个utf8字符使用1~4个字节,单个字符高位在左手边,顺次向后添加字符。