如何读取文件的编码信息 c语言
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何读取文件的编码信息 c语言相关的知识,希望对你有一定的参考价值。
参考技术A UTF-8是一种多字节编码的字符集,表示一个Unicode字符时,它可以是1个至多个字节,在表示上有规律:1字节:0xxxxxxx
2字节:110xxxxx
10xxxxxx
3字节:1110xxxx
10xxxxxx
10xxxxxx
4字节:11110xxx
10xxxxxx
10xxxxxx
10xxxxxx
这样就可以根据上面的特征对字符串进行遍历来判断一个字符串是不是UTF-8编码了。应该指出的是UTF-8字符串的各个字节的取值有一定的范围,并不是所有的值都是有效的UTF-8字符,但是一般的应用的情况下这样的判断在对足够长的字符串及是比较精确了,而且实现也比较简单。具体的字节取值范围可以参见"Unicode
Explained"一书中的6.4.3。
bool
IsUTF8(const
void*
pBuffer,
long
size)
bool
IsUTF8
=
true;
unsigned
char*
start
=
(unsigned
char*)pBuffer;
unsigned
char*
end
=
(unsigned
char*)pBuffer
+
size;
while
(start
<
end)
if
(*start
<
0x80)
//
(10000000):
值小于0x80的为ASCII字符
start++;
else
if
(*start
<
(0xC0))
//
(11000000):
值介于0x80与0xC0之间的为无效UTF-8字符
IsUTF8
=
false;
break;
else
if
(*start
<
(0xE0))
//
(11100000):
此范围内为2字节UTF-8字符
if
(start
>=
end
-
1)
break;
if
((start[1]
&
(0xC0))
!=
0x80)
IsUTF8
=
false;
break;
start
+=
2;
else
if
(*start
<
(0xF0))
//
(11110000):
此范围内为3字节UTF-8字符
if
(start
>=
end
-
2)
break;
if
((start[1]
&
(0xC0))
!=
0x80
||
(start[2]
&
(0xC0))
!=
0x80)
IsUTF8
=
false;
break;
start
+=
3;
else
IsUTF8
=
false;
break;
return
IsUTF8;
UTF-
16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于
0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF
-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。本回答被提问者采纳
用C语言读取16位bmp图片的每个像素的信息~
用C语言。
网上有很多24位图的,所以就不用麻烦大家了~
但是我们老师要求要16位,256的都要,我就头大了~
哪位大侠好心帮帮忙~~~
读出 BITMAPINFO 结构:
typedef struct tagBITMAPINFO
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
BITMAPINFO;
以后,
BITMAPINFOHEADER 结构 里就有 biBitCount
biBitCount 等于 16 就是16位,等于24 就是24位,等于32 就是32位。
颜色在哪,要考虑 biCompression 压缩方法,若等于 BI_RGB, bmiColors 就等于 NULL. 在 bitmap 数组里 每个WORD 就是 一个像素点. 5个 bits 兰,5个 bits 绿,再5个 bits 红,最高位不用。
其它方法自己看资料吧。 参考技术A 一个道理啊
VC做??
以上是关于如何读取文件的编码信息 c语言的主要内容,如果未能解决你的问题,请参考以下文章