Jul
11
GetProcAddress地址可以用如下代码获得
mov eax ,[ebp+Kernel32]
lea esi,[ebp+API_GetProcAddress]
call GetFuntionAddress
mov [ebp+ADDR_GetProcAddress],eax
对于kernel32引出的函数都可以用如上的方法获得地址
mov eax ,[ebp+Kernel32]
lea esi,[ebp+API_GetProcAddress]
call GetFuntionAddress
mov [ebp+ADDR_GetProcAddress],eax
对于kernel32引出的函数都可以用如上的方法获得地址
Mar
18
1″=8分(1英寸等于8分,25.4mm)
4分=4×1/8=1/2″(公称直径:DN15 12.7mm 外径为Φ21.25mm)
6分=6×1/8=3/4″(公称直径:DN20 19.05mm)
这是英制表示方法,25.4mm的一半,25.4÷8=3.175mm,3.175×4=12.7mm,3.175×6=19.05mm
例如:
2/8即是2分
8/8即是8分
16/8即是16分的
以8为底的分数,计算大小的时候,用分数得出来的是英寸,再换算成毫米就行了.
常用的如下:
公称直径DN6 对应的俗称 1分
公称直径DN8 对应的俗称 2分
公称直径DN10 对应的俗称 3分
公称直径DN15 对应的俗称 4分
公称直径DN20 对应的俗称 6分
公称直径DN25 对应的俗称 1吋
公称直径DN32 对应的俗称 1吋2分
公称直径DN40 对应的俗称 1吋半
公称直径DN50 对应的俗称 2吋
公称直径DN65 对应的俗称 2吋半
公称直径DN80 对应的俗称 3吋
公称直径DN100 对应的俗称 4吋
公称直径DN125 对应的俗称 5吋
4分=4×1/8=1/2″(公称直径:DN15 12.7mm 外径为Φ21.25mm)
6分=6×1/8=3/4″(公称直径:DN20 19.05mm)
这是英制表示方法,25.4mm的一半,25.4÷8=3.175mm,3.175×4=12.7mm,3.175×6=19.05mm
例如:
2/8即是2分
8/8即是8分
16/8即是16分的
以8为底的分数,计算大小的时候,用分数得出来的是英寸,再换算成毫米就行了.
常用的如下:
公称直径DN6 对应的俗称 1分
公称直径DN8 对应的俗称 2分
公称直径DN10 对应的俗称 3分
公称直径DN15 对应的俗称 4分
公称直径DN20 对应的俗称 6分
公称直径DN25 对应的俗称 1吋
公称直径DN32 对应的俗称 1吋2分
公称直径DN40 对应的俗称 1吋半
公称直径DN50 对应的俗称 2吋
公称直径DN65 对应的俗称 2吋半
公称直径DN80 对应的俗称 3吋
公称直径DN100 对应的俗称 4吋
公称直径DN125 对应的俗称 5吋
Mar
18
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
public class ReadFromFile {
/**
* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
*/
public static void readFileByBytes(String fileName) {
File file = new File(fileName);
InputStream in = null;
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
public class ReadFromFile {
/**
* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
*/
public static void readFileByBytes(String fileName) {
File file = new File(fileName);
InputStream in = null;
Jan
11
音标符号 10进制Unicode编码 16进制Unicode编码
æ 230 00E6
ð 240 00F0
ŋ 331 014B
ɑ 593 0251
ɒ 594 0252
ɔ 596 0254
ə 601 0259
ɛ 603 025B
ɜ 604 025C
ɡ 609 0261
ɪ 618 026A
ʃ 643 0283
ʊ 650 028A
ʌ 652 028C
ʒ 658 0292
ˈ 712 02C8
ˌ 716 02CC
ː 720 02D0
θ 952 03B8
æ 230 00E6
ð 240 00F0
ŋ 331 014B
ɑ 593 0251
ɒ 594 0252
ɔ 596 0254
ə 601 0259
ɛ 603 025B
ɜ 604 025C
ɡ 609 0261
ɪ 618 026A
ʃ 643 0283
ʊ 650 028A
ʌ 652 028C
ʒ 658 0292
ˈ 712 02C8
ˌ 716 02CC
ː 720 02D0
θ 952 03B8
Jan
7
//GB2312 转换成 Unicode:
wchar_t* GB2312ToUnicode(const char* szGBString)
{
UINT nCodePage = 936; //GB2312
int nLength=MultiByteToWideChar(nCodePage,0,szGBString,-1,NULL,0);
wchar_t* pBuffer = new wchar_t[nLength+1];
MultiByteToWideChar(nCodePage,0,szGBString,-1,pBuffer,nLength);
pBuffer[nLength]=0;
return pBuffer;
}
//BIG5 转换成 Unicode:
wchar_t* BIG5ToUnicode(const char* szBIG5String)
{
UINT nCodePage = 950; //BIG5
int nLength=MultiByteToWideChar(nCodePage,0,szBIG5String,-1,NULL,0);
wchar_t* pBuffer = new wchar_t[nLength+1];
MultiByteToWideChar(nCodePage,0,szBIG5String,-1,pBuffer,nLength);
pBuffer[nLength]=0;
return pBuffer;
}
//Unicode 转换成 GB2312:
char* UnicodeToGB2312(const wchar_t* szUnicodeString)
{
UINT nCodePage = 936; //GB2312
int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);
char* pBuffer=new char[nLength+1];
WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);
pBuffer[nLength]=0;
return pBuffer;
}
//Unicode 转换成 BIG5:
char* UnicodeToBIG5(const wchar_t* szUnicodeString)
UINT nCodePage = 950; //BIG5
int nLength=WideCharToMultiByte(nCodePage,0,
szUnicodeString,-1,NULL,0,NULL,NULL);
char* pBuffer=new char[nLength+1];
WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);
pBuffer[nLength]=0;
return pBuffer;
}
//繁体中文BIG5 转换成 简体中文 GB2312
char* BIG5ToGB2312(const char* szBIG5String)
{
LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
SORT_CHINESE_PRC);
wchar_t* szUnicodeBuff = BIG5ToUnicode(szBIG5String);
char* szGB2312Buff = UnicodeToGB2312(szUnicodeBuff);
int nLength = LCMapString(lcid,LCMAP_SIMPLIFIED_CHINESE, szGB2312Buff,-1,NULL,0);
char* pBuffer = new char[nLength + 1];
LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE,szGB2312Buff,-1,pBuffer,nLength);
pBuffer[nLength] = 0;
delete[] szUnicodeBuff;
delete[] szGB2312Buff;
return pBuffer;
}
//简体中文 GB2312 转换成 繁体中文BIG5
char* GB2312ToBIG5(const char* szGBString)
{
LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
SORT_CHINESE_PRC);
int nLength = LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,NULL,0);
char* pBuffer=new char[nLength+1];
LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,pBuffer,nLength);
pBuffer[nLength]=0;
wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);
char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);
delete[] pBuffer;
delete[] pUnicodeBuff;
return pBIG5Buff;
}
1 //---------------------------------------------------------------------------
//函数输入Big5字符,返回Gb简体字符 //两次转换
//---------------------------------------------------------------------------
AnsiString __fastcall Big2Gb(AnsiString sBig)
{
char* pszBig5=NULL; //Big5编码的字符
wchar_t* wszUnicode=NULL; //Unicode编码的字符
char* pszGbt=NULL; //Gb编码的繁体字符
char* pszGbs=NULL; //Gb编码的简体字符
AnsiString sGb; //返回的字符串
int iLen=0; //需要转换的字符数
pszBig5=sBig.c_str(); //读入需要转换的字符参数
//计算转换的字符数
iLen=MultiByteToWideChar (950, 0, pszBig5, -1, NULL,0) ;
//给wszUnicode分配内存
wszUnicode=new wchar_t[iLen+1];
//转换Big5码到Unicode码,使用了API函数MultiByteToWideChar
MultiByteToWideChar (950, 0, pszBig5, -1, wszUnicode,iLen);
//计算转换的字符数
iLen=WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ;
//给pszGbt分配内存
pszGbt=new char[iLen+1];
//给pszGbs分配内存
pszGbs=new char[iLen+1];
//转换Unicode码到Gb码繁体,使用API函数WideCharToMultiByte
WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, pszGbt,iLen, NULL, NULL) ;
//转换Gb码繁体到Gb码简体,使用API函数LCMapString
LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE, pszGbt, -1, pszGbs, iLen);
//返回Gb码简体字符
sGb=pszGbs;
//释放内存
delete [] wszUnicode;
delete [] pszGbt;
delete [] pszGbs;
return sGb;
}
2 //---------------------------------------------------------------------------
//函数输入Gb字符,返回Big5字符 //两次转换
//---------------------------------------------------------------------------
AnsiString __fastcall Gb2Big(AnsiString sGb)
{
char* pszGbt=NULL; //Gb编码的繁体字符
char* pszGbs=NULL; //Gb编码的简体字符
wchar_t* wszUnicode=NULL; //Unicode编码的字符
char* pszBig5=NULL; //Big5编码的字符
AnsiString sBig5; //返回的字符串
int iLen=0; //需要转换的字符数
pszGbs=sGb.c_str(); //读入需要转换的字符参数
//计算转换的字符数
iLen=MultiByteToWideChar (936, 0, pszGbs, -1, NULL,0) ;
//给pszGbt分配内存
pszGbt=new char[iLen*2+1];
//转换Gb码简体到Gb码繁体,使用API函数LCMapString
LCMapString(0)
要确保是在unicode环境下,才可使用WideCharToMultiByte
wchar_t* GB2312ToUnicode(const char* szGBString)
{
UINT nCodePage = 936; //GB2312
int nLength=MultiByteToWideChar(nCodePage,0,szGBString,-1,NULL,0);
wchar_t* pBuffer = new wchar_t[nLength+1];
MultiByteToWideChar(nCodePage,0,szGBString,-1,pBuffer,nLength);
pBuffer[nLength]=0;
return pBuffer;
}
//BIG5 转换成 Unicode:
wchar_t* BIG5ToUnicode(const char* szBIG5String)
{
UINT nCodePage = 950; //BIG5
int nLength=MultiByteToWideChar(nCodePage,0,szBIG5String,-1,NULL,0);
wchar_t* pBuffer = new wchar_t[nLength+1];
MultiByteToWideChar(nCodePage,0,szBIG5String,-1,pBuffer,nLength);
pBuffer[nLength]=0;
return pBuffer;
}
//Unicode 转换成 GB2312:
char* UnicodeToGB2312(const wchar_t* szUnicodeString)
{
UINT nCodePage = 936; //GB2312
int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);
char* pBuffer=new char[nLength+1];
WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);
pBuffer[nLength]=0;
return pBuffer;
}
//Unicode 转换成 BIG5:
char* UnicodeToBIG5(const wchar_t* szUnicodeString)
UINT nCodePage = 950; //BIG5
int nLength=WideCharToMultiByte(nCodePage,0,
szUnicodeString,-1,NULL,0,NULL,NULL);
char* pBuffer=new char[nLength+1];
WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);
pBuffer[nLength]=0;
return pBuffer;
}
//繁体中文BIG5 转换成 简体中文 GB2312
char* BIG5ToGB2312(const char* szBIG5String)
{
LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
SORT_CHINESE_PRC);
wchar_t* szUnicodeBuff = BIG5ToUnicode(szBIG5String);
char* szGB2312Buff = UnicodeToGB2312(szUnicodeBuff);
int nLength = LCMapString(lcid,LCMAP_SIMPLIFIED_CHINESE, szGB2312Buff,-1,NULL,0);
char* pBuffer = new char[nLength + 1];
LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE,szGB2312Buff,-1,pBuffer,nLength);
pBuffer[nLength] = 0;
delete[] szUnicodeBuff;
delete[] szGB2312Buff;
return pBuffer;
}
//简体中文 GB2312 转换成 繁体中文BIG5
char* GB2312ToBIG5(const char* szGBString)
{
LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
SORT_CHINESE_PRC);
int nLength = LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,NULL,0);
char* pBuffer=new char[nLength+1];
LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,pBuffer,nLength);
pBuffer[nLength]=0;
wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);
char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);
delete[] pBuffer;
delete[] pUnicodeBuff;
return pBIG5Buff;
}
1 //---------------------------------------------------------------------------
//函数输入Big5字符,返回Gb简体字符 //两次转换
//---------------------------------------------------------------------------
AnsiString __fastcall Big2Gb(AnsiString sBig)
{
char* pszBig5=NULL; //Big5编码的字符
wchar_t* wszUnicode=NULL; //Unicode编码的字符
char* pszGbt=NULL; //Gb编码的繁体字符
char* pszGbs=NULL; //Gb编码的简体字符
AnsiString sGb; //返回的字符串
int iLen=0; //需要转换的字符数
pszBig5=sBig.c_str(); //读入需要转换的字符参数
//计算转换的字符数
iLen=MultiByteToWideChar (950, 0, pszBig5, -1, NULL,0) ;
//给wszUnicode分配内存
wszUnicode=new wchar_t[iLen+1];
//转换Big5码到Unicode码,使用了API函数MultiByteToWideChar
MultiByteToWideChar (950, 0, pszBig5, -1, wszUnicode,iLen);
//计算转换的字符数
iLen=WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ;
//给pszGbt分配内存
pszGbt=new char[iLen+1];
//给pszGbs分配内存
pszGbs=new char[iLen+1];
//转换Unicode码到Gb码繁体,使用API函数WideCharToMultiByte
WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, pszGbt,iLen, NULL, NULL) ;
//转换Gb码繁体到Gb码简体,使用API函数LCMapString
LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE, pszGbt, -1, pszGbs, iLen);
//返回Gb码简体字符
sGb=pszGbs;
//释放内存
delete [] wszUnicode;
delete [] pszGbt;
delete [] pszGbs;
return sGb;
}
2 //---------------------------------------------------------------------------
//函数输入Gb字符,返回Big5字符 //两次转换
//---------------------------------------------------------------------------
AnsiString __fastcall Gb2Big(AnsiString sGb)
{
char* pszGbt=NULL; //Gb编码的繁体字符
char* pszGbs=NULL; //Gb编码的简体字符
wchar_t* wszUnicode=NULL; //Unicode编码的字符
char* pszBig5=NULL; //Big5编码的字符
AnsiString sBig5; //返回的字符串
int iLen=0; //需要转换的字符数
pszGbs=sGb.c_str(); //读入需要转换的字符参数
//计算转换的字符数
iLen=MultiByteToWideChar (936, 0, pszGbs, -1, NULL,0) ;
//给pszGbt分配内存
pszGbt=new char[iLen*2+1];
//转换Gb码简体到Gb码繁体,使用API函数LCMapString
LCMapString(0)
要确保是在unicode环境下,才可使用WideCharToMultiByte
Dec
26
宽字符函数 普通C函数 描述
iswalnum() isalnum() 测试字符是否为数字或字母
iswalpha() isalpha() 测试字符是否是字母
iswcntrl() iscntrl() 测试字符是否是控制符
iswdigit() isdigit() 测试字符是否为数字
iswgraph() isgraph() 测试字符是否是可见字符
iswlower() islower() 测试字符是否是小写字符
iswprint() isprint() 测试字符是否是可打印字符
iswpunct() ispunct() 测试字符是否是标点符号
iswspace() isspace() 测试字符是否是空白符号
iswupper() isupper() 测试字符是否是大写字符
iswxdigit() isxdigit() 测试字符是否是十六进制的数字
大小写转换:
towlower() tolower() 把字符转换为小写
towupper() toupper() 把字符转换为大写
字符比较:
wcscoll() strcoll() 比较字符串
日期和时间转换:
strftime() 根据指定的字符串格式和locale设置格式化日期和时间
wcsftime() 根据指定的字符串格式和locale设置格式化日期和时间, 并返回宽字符串
strptime() 根据指定格式把字符串转换为时间值, 是strftime的反过程
打印和扫描字符串:
fprintf()/fwprintf() 使用vararg参量的格式化输出
fscanf()/fwscanf() 格式化读入
printf() 使用vararg参量的格式化输出到标准输出
scanf() 从标准输入的格式化读入
sprintf()/swprintf() 根据vararg参量表格式化成字符串
sscanf() 以字符串作格式化读入
vfprintf()/vfwprintf() 使用stdarg参量表格式化输出到文件
vprintf() 使用stdarg参量表格式化输出到标准输出
vsprintf()/vswprintf() 格式化stdarg参量表并写到字符串
数字转换:
wcstod() strtod() 把宽字符的初始部分转换为双精度浮点数
wcstol() strtol() 把宽字符的初始部分转换为长整数
wcstoul() strtoul() 把宽字符的初始部分转换为无符号长整数
多字节字符和宽字符转换及操作:
mblen() 根据locale的设置确定字符的字节数
mbstowcs() 把多字节字符串转换为宽字符串
mbtowc()/btowc() 把多字节字符转换为宽字符
wcstombs() 把宽字符串转换为多字节字符串
wctomb()/wctob() 把宽字符转换为多字节字符
输入和输出:
fgetwc() fgetc() 从流中读入一个字符并转换为宽字符
fgetws() fgets() 从流中读入一个字符串并转换为宽字符串
fputwc() fputc() 把宽字符转换为多字节字符并且输出到标准输出
fputws() fputs() 把宽字符串转换为多字节字符并且输出到标准输出串
getwc() getc() 从标准输入中读取字符, 并且转换为宽字符
getwchar() getchar() 从标准输入中读取字符, 并且转换为宽字符
None gets() 使用fgetws()
putwc() putc() 把宽字符转换成多字节字符并且写到标准输出
putwchar() putchar() 把宽字符转换成多字节字符并且写到标准输出
None puts() 使用fputws()
ungetwc() ungetc() 把一个宽字符放回到输入流中
字符串操作:
wcscat() strcat() 把一个字符串接到另一个字符串的尾部
wcsncat() strncat() 类似于wcscat(), 而且指定粘接字符串的粘接长度.
wcschr() strchr() 查找子字符串的第一个位置
wcsrchr() strrchr() 从尾部开始查找子字符串出现的第一个位置
wcspbrk() strpbrk() 从一字符字符串中查找另一字符串中任何一个字符第一次出现的位置
wcswcs()/wcsstr() strchr() 在一字符串中查找另一字符串第一次出现的位置
wcscspn() strcspn() 返回不包含第二个字符串的的初始数目
wcsspn() strspn() 返回包含第二个字符串的初始数目
wcscpy() strcpy() 拷贝字符串
wcsncpy() strncpy() 类似于wcscpy(), 同时指定拷贝的数目
wcscmp() strcmp() 比较两个宽字符串
wcsncmp() strncmp() 类似于wcscmp(), 还要指定比较字符字符串的数目
wcslen() strlen() 获得宽字符串的数目
wcstok() strtok() 根据标示符把宽字符串分解成一系列字符串
wcswidth() None 获得宽字符串的宽度
wcwidth() None 获得宽字符的宽度
对于memory操作wmemcpy(), wmemchr(), wmemcmp(), wmemmove(), wmemset()
iswalnum() isalnum() 测试字符是否为数字或字母
iswalpha() isalpha() 测试字符是否是字母
iswcntrl() iscntrl() 测试字符是否是控制符
iswdigit() isdigit() 测试字符是否为数字
iswgraph() isgraph() 测试字符是否是可见字符
iswlower() islower() 测试字符是否是小写字符
iswprint() isprint() 测试字符是否是可打印字符
iswpunct() ispunct() 测试字符是否是标点符号
iswspace() isspace() 测试字符是否是空白符号
iswupper() isupper() 测试字符是否是大写字符
iswxdigit() isxdigit() 测试字符是否是十六进制的数字
大小写转换:
towlower() tolower() 把字符转换为小写
towupper() toupper() 把字符转换为大写
字符比较:
wcscoll() strcoll() 比较字符串
日期和时间转换:
strftime() 根据指定的字符串格式和locale设置格式化日期和时间
wcsftime() 根据指定的字符串格式和locale设置格式化日期和时间, 并返回宽字符串
strptime() 根据指定格式把字符串转换为时间值, 是strftime的反过程
打印和扫描字符串:
fprintf()/fwprintf() 使用vararg参量的格式化输出
fscanf()/fwscanf() 格式化读入
printf() 使用vararg参量的格式化输出到标准输出
scanf() 从标准输入的格式化读入
sprintf()/swprintf() 根据vararg参量表格式化成字符串
sscanf() 以字符串作格式化读入
vfprintf()/vfwprintf() 使用stdarg参量表格式化输出到文件
vprintf() 使用stdarg参量表格式化输出到标准输出
vsprintf()/vswprintf() 格式化stdarg参量表并写到字符串
数字转换:
wcstod() strtod() 把宽字符的初始部分转换为双精度浮点数
wcstol() strtol() 把宽字符的初始部分转换为长整数
wcstoul() strtoul() 把宽字符的初始部分转换为无符号长整数
多字节字符和宽字符转换及操作:
mblen() 根据locale的设置确定字符的字节数
mbstowcs() 把多字节字符串转换为宽字符串
mbtowc()/btowc() 把多字节字符转换为宽字符
wcstombs() 把宽字符串转换为多字节字符串
wctomb()/wctob() 把宽字符转换为多字节字符
输入和输出:
fgetwc() fgetc() 从流中读入一个字符并转换为宽字符
fgetws() fgets() 从流中读入一个字符串并转换为宽字符串
fputwc() fputc() 把宽字符转换为多字节字符并且输出到标准输出
fputws() fputs() 把宽字符串转换为多字节字符并且输出到标准输出串
getwc() getc() 从标准输入中读取字符, 并且转换为宽字符
getwchar() getchar() 从标准输入中读取字符, 并且转换为宽字符
None gets() 使用fgetws()
putwc() putc() 把宽字符转换成多字节字符并且写到标准输出
putwchar() putchar() 把宽字符转换成多字节字符并且写到标准输出
None puts() 使用fputws()
ungetwc() ungetc() 把一个宽字符放回到输入流中
字符串操作:
wcscat() strcat() 把一个字符串接到另一个字符串的尾部
wcsncat() strncat() 类似于wcscat(), 而且指定粘接字符串的粘接长度.
wcschr() strchr() 查找子字符串的第一个位置
wcsrchr() strrchr() 从尾部开始查找子字符串出现的第一个位置
wcspbrk() strpbrk() 从一字符字符串中查找另一字符串中任何一个字符第一次出现的位置
wcswcs()/wcsstr() strchr() 在一字符串中查找另一字符串第一次出现的位置
wcscspn() strcspn() 返回不包含第二个字符串的的初始数目
wcsspn() strspn() 返回包含第二个字符串的初始数目
wcscpy() strcpy() 拷贝字符串
wcsncpy() strncpy() 类似于wcscpy(), 同时指定拷贝的数目
wcscmp() strcmp() 比较两个宽字符串
wcsncmp() strncmp() 类似于wcscmp(), 还要指定比较字符字符串的数目
wcslen() strlen() 获得宽字符串的数目
wcstok() strtok() 根据标示符把宽字符串分解成一系列字符串
wcswidth() None 获得宽字符串的宽度
wcwidth() None 获得宽字符的宽度
对于memory操作wmemcpy(), wmemchr(), wmemcmp(), wmemmove(), wmemset()
Nov
29
一、在断电情况下,“望、闻、问、切”
由于检修电源要接触到220V高压电,人体一旦接触36V以上的电压就有生命危险。因此,在有可能的条件下,尽量先检查一下在断电状态下有无明显的短路、元器件损坏故障。首先,打开电源的外壳,检查保险丝(图5)是否熔断,再观察电源的内部情况,如果发现电源的PCB板上元件破裂,则应重点检查此元件,一般来讲这是出现故障的主要原因;闻一下电源内部是否有糊味,检查是否有烧焦的元器件;问一下电源损坏的经过,是否对电源进行违规的操作,这一点对于维修任何设备都是必须的。在初步检查以后,还要对电源进行更深入地检测。
用万用表测量AC电源线两端的正反向电阻及电容器充电情况,如果电阻值过低,说明电源内部存在短路,正常时其阻值应能达到100千欧以上;电容器应能够充放电,如果损坏,则表现为AC电源线两端阻值低,呈短路状态,否则可能是开关三极管VT1、VT2击穿。
然后检查直流输出部分。脱开负载,分别测量各组输出端的对地电阻,正常时,表针应有电容器充放电摆动,最后指示的应为该路的泄放电阻的阻值。否则多数是整流二极管反向击穿所致。
电脑开关电源维修图解
二、加电检测
在通过上述检查后,就可通电测试。这时候才是关键所在,需要有一定的经验、电子基础及维修技巧。一般来讲应重点检查一下电源的输入端,开关三极管,电源保护电路以及电源的输出电压电流等。如果电源启动一下就停止,则该电源处于保护状态下,可直接测量TL494的4脚电压,正常值应为0.4V以下,若测得电压值为+4V以上,则说明电源的处于保护状态下,应重点检查产生保护的原因。由于接触到高电压,建议没有电子基础的朋友要小心操作。
三、常见故障
1.保险丝熔断
一般情况下,保险丝熔断说明电源的内部线路有问题。由于电源工作在高电压、大电流的状态下,电网电压的波动、浪涌都会引起电源内电流瞬间增大而使保险丝熔断。重点应检查电源输入端的整流二极管,高压滤波电解电容,逆变功率开关管等,检查一下这些元器件有无击穿、开路、损坏等。如果确实是保险丝熔断,应该首先查看电路板上的各个元件,看这些元件的外表有没有被烧糊,有没有电解液溢出。如果没有发现上述情况,则用万用表进行测量,如果测量出来两个大功率开关管e、 c极间的阻值小于100kΩ,说明开关管损坏。其次测量输入端的电阻值,若小于200kΩ,说明后端有局部短路现象。
2.无直流电压输出或电压输出不稳定
如果保险丝是完好的,可是在有负载情况下,各级直流电压无输出。这种情况主要是以下原因造成的:电源中出现开路、短路现象,过压、过流保护电路出现故障,振荡电路没有工作,电源负载过重,高频整流滤波电路中整流二极管被击穿,滤波电容漏电等。这时,首先用万用表测量系统板+5V电源的对地电阻,若大于0.8Ω,则说明电路板无短路现象;然后将电脑中不必要的硬件暂时拆除,如硬盘、光盘驱动器等,只留下主板、电源、蜂鸣器,然后再测量各输出端的直流电压,如果这时输出为零,则可以肯定是电源的控制电路出了故障。
3.电源负载能力差
电源负开能力差是一个常见的故障,一般都是出现在老式或是工作时间长的电源中,主要原因是各元器件老化,开关三极管的工作不稳定,没有及时进行散热等。应重点检查稳压二极管是否发热漏电,整流二极管损坏、高压滤波电容损坏、晶体管工作点未选择好等。
4、通电无电压输出,电源内发出吱吱声。
这是电源过载或无负载的典型特征。先仔细检查各个元件,重点检查整流二极管、开关管等。经过仔细检查,发现一个整流二极管1N4001的表面已烧黑,而且电路板也给烧黑了。找同型号的二极管换下,用万用表一量果然是击穿的。接上电源,可风扇不转,吱吱声依然。用万用表量+12V输出只有+0.2V,+5V只有0.1V。这说明元件被击穿时电源启动自保护。测量初级和次级开关管,发现初级开关管中有一个已损坏,用相同型号的开关管换上,故障排除,一切正常。
5、没有吱吱声,上一个保险丝就烧一个保险丝。
由于保险丝不断地熔断,搜索范围就缩小了。可能性只有3个:1、整流桥击穿;2、大电解电容击穿;3、初级开关管击穿。电源的整流桥一般是分立的四个整流二极管,或是将四个二极管固化在一起。将整流桥拆下一量是正常的。大电解电容拆下测试后也正常,注意焊回时要注意正负极。最后的可能就只剩开关管了。这个电源的初级只有一个大功率的开关管。拆下一量果然击穿,找同型号开关管换上,问题解决。
其实,维修电源并不难,一般电源损坏都可以归结为保险丝熔断、整流二极管损坏、滤波电容开路或击穿、开关三极管击穿以及电源自保护等,因开关电源的电路较简单,故障类型少,很容易判断出故障位置。只要有足够的电子基础知识,多看看相关报刊,多动动手,平时注意经验的积累,电源故障是可以轻松检修的。
由于检修电源要接触到220V高压电,人体一旦接触36V以上的电压就有生命危险。因此,在有可能的条件下,尽量先检查一下在断电状态下有无明显的短路、元器件损坏故障。首先,打开电源的外壳,检查保险丝(图5)是否熔断,再观察电源的内部情况,如果发现电源的PCB板上元件破裂,则应重点检查此元件,一般来讲这是出现故障的主要原因;闻一下电源内部是否有糊味,检查是否有烧焦的元器件;问一下电源损坏的经过,是否对电源进行违规的操作,这一点对于维修任何设备都是必须的。在初步检查以后,还要对电源进行更深入地检测。
用万用表测量AC电源线两端的正反向电阻及电容器充电情况,如果电阻值过低,说明电源内部存在短路,正常时其阻值应能达到100千欧以上;电容器应能够充放电,如果损坏,则表现为AC电源线两端阻值低,呈短路状态,否则可能是开关三极管VT1、VT2击穿。
然后检查直流输出部分。脱开负载,分别测量各组输出端的对地电阻,正常时,表针应有电容器充放电摆动,最后指示的应为该路的泄放电阻的阻值。否则多数是整流二极管反向击穿所致。
电脑开关电源维修图解
二、加电检测
在通过上述检查后,就可通电测试。这时候才是关键所在,需要有一定的经验、电子基础及维修技巧。一般来讲应重点检查一下电源的输入端,开关三极管,电源保护电路以及电源的输出电压电流等。如果电源启动一下就停止,则该电源处于保护状态下,可直接测量TL494的4脚电压,正常值应为0.4V以下,若测得电压值为+4V以上,则说明电源的处于保护状态下,应重点检查产生保护的原因。由于接触到高电压,建议没有电子基础的朋友要小心操作。
三、常见故障
1.保险丝熔断
一般情况下,保险丝熔断说明电源的内部线路有问题。由于电源工作在高电压、大电流的状态下,电网电压的波动、浪涌都会引起电源内电流瞬间增大而使保险丝熔断。重点应检查电源输入端的整流二极管,高压滤波电解电容,逆变功率开关管等,检查一下这些元器件有无击穿、开路、损坏等。如果确实是保险丝熔断,应该首先查看电路板上的各个元件,看这些元件的外表有没有被烧糊,有没有电解液溢出。如果没有发现上述情况,则用万用表进行测量,如果测量出来两个大功率开关管e、 c极间的阻值小于100kΩ,说明开关管损坏。其次测量输入端的电阻值,若小于200kΩ,说明后端有局部短路现象。
2.无直流电压输出或电压输出不稳定
如果保险丝是完好的,可是在有负载情况下,各级直流电压无输出。这种情况主要是以下原因造成的:电源中出现开路、短路现象,过压、过流保护电路出现故障,振荡电路没有工作,电源负载过重,高频整流滤波电路中整流二极管被击穿,滤波电容漏电等。这时,首先用万用表测量系统板+5V电源的对地电阻,若大于0.8Ω,则说明电路板无短路现象;然后将电脑中不必要的硬件暂时拆除,如硬盘、光盘驱动器等,只留下主板、电源、蜂鸣器,然后再测量各输出端的直流电压,如果这时输出为零,则可以肯定是电源的控制电路出了故障。
3.电源负载能力差
电源负开能力差是一个常见的故障,一般都是出现在老式或是工作时间长的电源中,主要原因是各元器件老化,开关三极管的工作不稳定,没有及时进行散热等。应重点检查稳压二极管是否发热漏电,整流二极管损坏、高压滤波电容损坏、晶体管工作点未选择好等。
4、通电无电压输出,电源内发出吱吱声。
这是电源过载或无负载的典型特征。先仔细检查各个元件,重点检查整流二极管、开关管等。经过仔细检查,发现一个整流二极管1N4001的表面已烧黑,而且电路板也给烧黑了。找同型号的二极管换下,用万用表一量果然是击穿的。接上电源,可风扇不转,吱吱声依然。用万用表量+12V输出只有+0.2V,+5V只有0.1V。这说明元件被击穿时电源启动自保护。测量初级和次级开关管,发现初级开关管中有一个已损坏,用相同型号的开关管换上,故障排除,一切正常。
5、没有吱吱声,上一个保险丝就烧一个保险丝。
由于保险丝不断地熔断,搜索范围就缩小了。可能性只有3个:1、整流桥击穿;2、大电解电容击穿;3、初级开关管击穿。电源的整流桥一般是分立的四个整流二极管,或是将四个二极管固化在一起。将整流桥拆下一量是正常的。大电解电容拆下测试后也正常,注意焊回时要注意正负极。最后的可能就只剩开关管了。这个电源的初级只有一个大功率的开关管。拆下一量果然击穿,找同型号开关管换上,问题解决。
其实,维修电源并不难,一般电源损坏都可以归结为保险丝熔断、整流二极管损坏、滤波电容开路或击穿、开关三极管击穿以及电源自保护等,因开关电源的电路较简单,故障类型少,很容易判断出故障位置。只要有足够的电子基础知识,多看看相关报刊,多动动手,平时注意经验的积累,电源故障是可以轻松检修的。











