先去除不相干的代码,变为

程序代码:
#include <stdio.h>
#include <string.h>
int main( void )
{
short a[] = { -1, 257, 123, 62, 91, 18, 44, 73, 0, 26 };
size_t z = strlen( (char*)a );
printf( "%zu\n", z );
}
简而言之,就是把「short数组」当成「空字符结尾的字符串」看待,计算其字符串长度
如果系统是 big-endian,那么
short a[] = { -1, 257, 123, 62, 91, 18, 44, 73, 0, 26 };
它在内存中的字节排布就是 0xFF 0xFF 0x01 0x01
0x00 0x7B 0x00 0x3E ……
所以 strlen( (char*)a ) 返回
4
如果系统是 little-endian,那么
short a[] = { -1, 257, 123, 62, 91, 18, 44, 73, 0, 26 };
它在内存中的字节排布就是 0xFF 0xFF 0x01 0x01
0x7B 0x00 0x3E 0x00 ……
所以 strlen( (char*)a ) 返回
5
[此贴子已经被作者于2023-1-30 16:10编辑过]