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个字节,单个字符高位在左手边,顺次向后添加字符。