青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

xiaoxiaoling

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  17 Posts :: 2 Stories :: 9 Comments :: 0 Trackbacks

#

1)打開資源文件,把LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US修改為
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
2)關(guān)閉資源文件
3)打開對(duì)話框,輸入漢字,并保存
4)右擊資源文件屬性,選擇Resources->General->Culture,設(shè)置為:中文(中國) (0x804)
5)編譯,測(cè)試
posted @ 2008-12-11 17:53 clcl 閱讀(408) | 評(píng)論 (0)編輯 收藏

前言  
  看到有些人對(duì)位運(yùn)算還存在問題,于是決定寫這篇文章作個(gè)簡要說明。  
   
  什么是位(bit)?  
   
  很簡單,位(bit)就是單個(gè)的0或1,位是我們?cè)谟?jì)算機(jī)上所作一切的基礎(chǔ)。計(jì)算機(jī)上的所有數(shù)據(jù)都是用位來存儲(chǔ)的。一個(gè)字節(jié)(BYTE)由八個(gè)位組成,一個(gè)字(WORD)是二個(gè)字節(jié)或十六位,一個(gè)雙字(DWORD)是二個(gè)字(WORDS)或三十二位。如下所示:  
   
      0   1   0   0   0   1   1   1   1   0   0   0   0   1   1   1   0   1   1   1   0   1   0   0   0   1   1   1   1   0   0   0  
  |   |                             |                               |                               |                             |   |  
  |   +-   bit   31             |                               |                               |               bit   0   -+   |  
  |                                 |                               |                               |                                 |  
  +--   BYTE   3   ----   -+----   BYTE   2   ---+----   BYTE   1   ---+---   BYTE   0   -----+  
  |                                                                 |                                                                 |  
  +------------   WORD   1   ------------+-----------   WORD   0   -------------+  
  |                                                                                                                                   |  
  +-----------------------------   DWORD   -----------------------------+  
   
  使用位運(yùn)算的好處是可以將BYTE,   WORD   或   DWORD   作為小數(shù)組或結(jié)構(gòu)使用。通過位運(yùn)算可以檢查位的值或賦值,也可以對(duì)整組的位進(jìn)行運(yùn)算。  
   
  16進(jìn)制數(shù)及其與位的關(guān)系  
  用0或1表示的數(shù)值就是二進(jìn)制數(shù),很難理解。因此用到16進(jìn)制數(shù)。  
   
  16進(jìn)制數(shù)用4個(gè)位表示0   -   15的值,4個(gè)位組成一個(gè)16進(jìn)制數(shù)。也把4位成為半字節(jié)(nibble)。一個(gè)BYTE有二個(gè)nibble,因此可以用二個(gè)16進(jìn)制數(shù)表示一個(gè)BYTE。如下所示:  
   
  NIBBLE       HEX   VALUE  
  ======       =========  
    0000                 0  
    0001                 1  
    0010                 2  
    0011                 3  
    0100                 4  
    0101                 5  
    0110                 6  
    0111                 7  
    1000                 8  
    1001                 9  
    1010                 A  
    1011                 B  
    1100                 C  
    1101                 D  
    1110                 E  
    1111                 F  
   
  如果用一個(gè)字節(jié)存放字母"r"(ASCII碼114),結(jié)果是:  
  0111   0010         二進(jìn)制  
      7         2           16進(jìn)制  
   
  可以表達(dá)為:'0x72'  
   
  有6種位運(yùn)算:  
        &       與運(yùn)算  
        |       或運(yùn)算  
        ^       異或運(yùn)算  
        ~       非運(yùn)算(求補(bǔ))  
      >>       右移運(yùn)算  
      <<       左移運(yùn)算  
   
  與運(yùn)算(&)  
  雙目運(yùn)算。二個(gè)位都置位(等于1)時(shí),結(jié)果等于1,其它的結(jié)果都等于0。  
        1       &       1       ==       1  
        1       &       0       ==       0  
        0       &       1       ==       0  
        0       &       0       ==       0  
   
  與運(yùn)算的一個(gè)用途是檢查指定位是否置位(等于1)。例如一個(gè)BYTE里有標(biāo)識(shí)位,要檢查第4位是否置位,代碼如下:  
   
  BYTE   b   =   50;  
  if   (   b   &   0x10   )  
          cout   <<   "Bit   four   is   set"   <<   endl;  
  else  
          cout   <<   "Bit   four   is   clear"   <<   endl;  
   
  上述代碼可表示為:  
   
          00110010     -   b  
      &   00010000     -   &   0x10  
    ----------------------------  
          00010000     -   result  
   
  可以看到第4位是置位了。  
   
  或運(yùn)算(   |   )  
  雙目運(yùn)算。二個(gè)位只要有一個(gè)位置位,結(jié)果就等于1。二個(gè)位都為0時(shí),結(jié)果為0。  
        1       |       1       ==       1  
        1       |       0       ==       1  
        0       |       1       ==       1  
        0       |       0       ==       0  
   
  與運(yùn)算也可以用來檢查置位。例如要檢查某個(gè)值的第3位是否置位:  
   
  BYTE   b   =   50;  
  BYTE   c   =   b   |   0x04;  
  cout   <<   "c   =   "   <<   c   <<   endl;  
   
  可表達(dá)為:  
   
          00110010     -   b  
      |   00000100     -   |   0x04  
      ----------  
          00110110     -   result  
   
  異或運(yùn)算(^)  
  雙目運(yùn)算。二個(gè)位不相等時(shí),結(jié)果為1,否則為0。  
   
        1       ^       1       ==       0  
        1       ^       0       ==       1  
        0       ^       1       ==       1  
        0       ^       0       ==       0  
   
  異或運(yùn)算可用于位值翻轉(zhuǎn)。例如將第3位與第4位的值翻轉(zhuǎn):  
   
  BYTE   b   =   50;  
  cout   <<   "b   =   "   <<   b   <<   endl;  
  b   =   b   ^   0x18;  
  cout   <<   "b   =   "   <<   b   <<   endl;  
  b   =   b   ^   0x18;  
  cout   <<   "b   =   "   <<   b   <<   endl;  
   
  可表達(dá)為:  
   
          00110010     -   b  
      ^   00011000     -   ^0x18  
      ----------  
          00101010     -   result  
   
          00101010     -   b  
      ^   00011000     -   ^0x18  
      ----------  
          00110010     -   result  
   
  非運(yùn)算(~)  
  單目運(yùn)算。位值取反,置0為1,或置1為0。非運(yùn)算的用途是將指定位清0,其余位置1。非運(yùn)算與數(shù)值大小無關(guān)。例如將第1位和第2位清0,其余位置1:  
   
  BYTE   b   =   ~0x03;  
  cout   <<   "b   =   "   <<   b   <<   endl;  
  WORD   w   =   ~0x03;  
  cout   <<   "w   =   "   <<   w   <<   endl;  
   
  可表達(dá)為:  
   
          00000011     -   0x03  
          11111100     -   ~0x03     b  
   
          0000000000000011     -   0x03  
          1111111111111100     -   ~0x03     w  
   
  非運(yùn)算和與運(yùn)算結(jié)合,可以確保將指定為清0。如將第4位清0:  
   
  BYTE   b   =   50;  
  cout   <<   "b   =   "   <<   b   <<   endl;  
  BYTE   c   =   b   &   ~0x10;  
  cout   <<   "c   =   "   <<   c   <<   endl;  
   
  可表達(dá)為:  
   
          00110010     -   b  
      &   11101111     -   ~0x10  
      ----------  
          00100010     -   result  
   
  移位運(yùn)算(>>   與   <<)  
  將位值向一個(gè)方向移動(dòng)指定的位數(shù)。右移   >>   算子從高位向低位移動(dòng),左移   <<   算子從低位向高位移動(dòng)。往往用位移來對(duì)齊位的排列(如MAKEWPARAM,   HIWORD,   LOWORD   宏的功能)。  
   
  BYTE   b   =   12;  
  cout   <<   "b   =   "   <<   b   <<   endl;  
  BYTE   c   =   b   <<   2;  
  cout   <<   "c   =   "   <<   c   <<   endl;  
  c   =   b   >>   2;  
  cout   <<   "c   =   "   <<   c   <<   endl;  
   
  可表達(dá)為:  
          00001100     -   b  
          00110000     -   b   <<   2  
          00000011     -   b   >>   2  
   
  譯注:以上示例都對(duì),但舉例用法未必恰當(dāng)。請(qǐng)閱文末鏈接的文章,解釋得較為清楚。  
   
  位域(Bit   Field)  
  位操作中的一件有意義的事是位域。利用位域可以用BYTE,   WORD或DWORD來創(chuàng)建最小化的數(shù)據(jù)結(jié)構(gòu)。例如要保存日期數(shù)據(jù),并盡可能減少內(nèi)存占用,就可以聲明這樣的結(jié)構(gòu):  
   
  struct   date_struct   {  
          BYTE       day       :   5,       //   1   to   31  
                        month   :   4,       //   1   to   12  
                        year     :   14;     //   0   to   9999  
          }date;  
           
  在結(jié)構(gòu)中,日期數(shù)據(jù)占用最低5位,月份占用4位,年占用14位。這樣整個(gè)日期數(shù)據(jù)只需占用23位,即3個(gè)字節(jié)。忽略第24位。如果用整數(shù)來表達(dá)各個(gè)域,整個(gè)結(jié)構(gòu)要占用12個(gè)字節(jié)。  
   
  |   0   0   0   0   0   0   0   0   |   0   0   0   0   0   0   0   0   |   0   0   0   0   0   0   0   0   |  
        |                                                           |                   |                     |  
        +-------------   year   --------------+   month+--   day   --+  
   
  現(xiàn)在分別看看在這個(gè)結(jié)構(gòu)聲明中發(fā)生了什么  
   
  首先看一下位域結(jié)構(gòu)使用的數(shù)據(jù)類型。這里用的是BYTE。1個(gè)BYTE有8個(gè)位,編譯器將分配1個(gè)BYTE的內(nèi)存。如果結(jié)構(gòu)內(nèi)的數(shù)據(jù)超過8位,編譯器就再分配1個(gè)BYTE,直到滿足數(shù)據(jù)要求。如果用WORD或DWORD作結(jié)構(gòu)的數(shù)據(jù)類型,編譯器就分配一個(gè)完整的32位內(nèi)存給結(jié)構(gòu)。  
   
  其次看一下域聲明。變量(day,   month,   year)名跟隨一個(gè)冒號(hào),冒號(hào)后是變量占用的位數(shù)。位域之間用逗號(hào)分隔,用分號(hào)結(jié)束。  
   
  使用了位域結(jié)構(gòu),就可以方便地象處理普通結(jié)構(gòu)數(shù)據(jù)那樣處理成員數(shù)據(jù)。盡管我們無法得到位域的地址,卻可以使用結(jié)構(gòu)地址。例如:  
  date.day   =   12;  
  dateptr   =   &date;  
  dateptr->year   =   1852;
posted @ 2008-11-11 22:21 clcl 閱讀(228) | 評(píng)論 (0)編輯 收藏

CButtonT           CButton           CTrackBarCtrlT         CTrackBarCtrl
CListBoxT          CListBox          CUpDownCtrlT           CUpDownCtrl
CComboBoxT         CComboBox         CProgressBarCtrlT      CProgressBarCtrl
CEditT             CEdit             CHotKeyCtrlT           CHotKeyCtrl
CScrollBarT        CScrollBar        CAnimateCtrlT          CAnimateCtrl
CToolTipCtrlT CToolTipCtrl      CRichEditCtrlT         CRichEditCtrl
CHeaderCtrlT       CHeaderCtrl       CReBarCtrlT            CReBarCtrl
CListViewCtrlT     CListViewCtrl     CMonthCalendarCtrlT    CMonthCalendarCtrl
CTreeViewCtrlT     CTreeViewCtrl     CDateTimePickerCtrlT  CDateTimePickerCtrl
CToolBarCtrlT CToolBarCtrl      CIPAddressCtrlT        CIPAddressCtrl
CStatusBarCtrlT    CStatusBarCtrl    CPagerCtrlT            CPagerCtrl
CTabCtrlT          CTabCtrl
posted @ 2008-11-11 17:02 clcl 閱讀(1479) | 評(píng)論 (0)編輯 收藏

   char file[MAX_PATH];
   TCHAR Tchartmp[MAX_PATH];

sprintf_s(file, "fileName%d", 134);

   CString strUnicode = file;

   wcscpy(Tchartmp,strUnicode);
posted @ 2008-10-14 15:00 clcl 閱讀(944) | 評(píng)論 (1)編輯 收藏

TCHAR tcScriptName[MAX_PATH];
tcScriptName = "filename";
size_t i;
  char tmp[MAX_PATH];
  mbstate_t       mbstate;

  // Reset to initial shift state
  ::memset((void*)&mbstate, 0, sizeof(mbstate));

  const wchar_t* wt = tcScriptName;
  wcsrtombs_s(&i, tmp, MAX_PATH, &wt, MAX_PATH,&mbstate);


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


char * input = null;
wchar_t wc_input[MAX_USERNAME_LEN] = L"test";

  int nLen = WideCharToMultiByte( CP_ACP, 0, wc_input, -1, NULL, 0, NULL, NULL );
  int i = wcslen(wc_input)*sizeof(wchar_t);
  input = (char*)realloc(input,i+1);
  if (!input)
  {
   free(input);
   input = (char*)malloc(i + 1);
  }
  WideCharToMultiByte( CP_ACP, 0, wc_input, -1, input, nLen, NULL, NULL );


 

posted @ 2008-10-14 14:26 clcl 閱讀(8071) | 評(píng)論 (4)編輯 收藏

繼承是類與類的關(guān)系。
重載是方法與方法之間的關(guān)系。

繼承是一個(gè)類需要另一個(gè)類的屬性和方法,所以用到繼承,這是發(fā)生在兩個(gè)類之間的事情。
重載是指一個(gè)方法與另一個(gè)方法的方法名相同而參數(shù)列表不相同,這樣的情況叫重載,屬于多態(tài)。這是發(fā)生在一個(gè)類中的事情。

一個(gè)子類繼承另外一個(gè)類,可以對(duì)父類中的方法進(jìn)行重寫,說到這里應(yīng)該可以看出,繼承和重載沒什么關(guān)系了。而重寫卻與繼承有很大的關(guān)系。
因?yàn)橹貙懸话愣及l(fā)生在有繼承的情況下,就是子類重寫父類的方法。


重載和重寫有什么區(qū)別和聯(lián)系:

先說聯(lián)系:
都是發(fā)生在同名方法之間的事情。

區(qū)別:
重載是發(fā)生在一個(gè)類中,根據(jù)參數(shù)列表的不同來區(qū)分兩個(gè)同名的方法。
重寫是發(fā)生在兩個(gè)又繼承關(guān)系的類中,根據(jù)方法體不同來區(qū)分兩個(gè)同名方法。



memcpy
開放分類: C語言函數(shù)

  原型:extern void *memcpy(void *dest, void *src, unsigned int count);
  用法:#include <string.h>
 
  功能:由src所指內(nèi)存區(qū)域復(fù)制count個(gè)字節(jié)到dest所指內(nèi)存區(qū)域。
 
  說明:src和dest所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向dest的指針。
 
  舉例:
      // memcpy.c
     
      #include <syslib.h>
      #include <string.h>
      main()
      {
        char *s="Golden Global View";
        char d[20];
       
        clrscr();
       
        memcpy(d,s,strlen(s));
        d[strlen(s)]=0;
        printf("%s",d);
        getchar();
        return 0;
      }
 

 

 

strcat
 
 

  原型:extern char *strcat(char *dest,char *src);
       
  用法:#include <string.h>
 
  功能:把src所指字符串添加到dest結(jié)尾處(覆蓋dest結(jié)尾處的'\0')并添加'\0'。
 
  說明:src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來容納src的字符串。
        返回指向dest的指針。
 
  舉例:


      // strcat.c
     
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char d[20]="Golden Global";
        char *s=" View";
       
        clrscr();
       
        strcat(d,s);
        printf("%s",d);

        getchar();
        return 0;
      }

 

 

memset
在你申請(qǐng)了一塊內(nèi)存之后,
比如
int *p=NULL;
p=malloc(10*sizeof(int));//申請(qǐng)了10個(gè)int型內(nèi)存
memset(p,0,10*sizeof(int));//全部初始化為0

memset的作用就是把你快連續(xù)的內(nèi)存初始化為你給的值。
Example
/* MEMSET.C: This program uses memset to
* set the first four bytes of buffer to "*".
*/

#include <memory.h>
#include <stdio.h>

void main( void )
{
char buffer[] = "This is a test of the memset function";

printf( "Before: %s\n", buffer );
memset( buffer, '*', 4 );
printf( "After: %s\n", buffer );
}

Output
Before: This is a test of the memset function
After: **** is a test of the memset function

 

 

 

 

 

ftell
開放分類: 計(jì)算機(jī)語言、計(jì)算機(jī)技術(shù)、編程、程序、函數(shù)

函數(shù)名: ftell
功  能: 返回當(dāng)前文件指針
用  法: long ftell(FILE *stream);
程序例:

#include <stdio.h>

int main(void)
{
   FILE *stream;

   stream = fopen("MYFILE.TXT", "w+");
   fprintf(stream, "This is a test");
   printf("The file pointer is at byte \
          %ld\n", ftell(stream));
   fclose(stream);
   return 0;
}

 

 

 


fopen
開放分類: 計(jì)算機(jī)語言、計(jì)算機(jī)技術(shù)、編程、程序、函數(shù)

fopen(打開文件)
相關(guān)函數(shù)  open,fclose
表頭文件  #include<stdio.h>
定義函數(shù)  FILE * fopen(const char * path,const char * mode);
函數(shù)說明  參數(shù)path字符串包含欲打開的文件路徑及文件名,參數(shù)mode字符串則代表著流形態(tài)。
mode有下列幾種形態(tài)字符串:
r 打開只讀文件,該文件必須存在。
r+ 打開可讀寫的文件,該文件必須存在。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內(nèi)容會(huì)消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留。
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留。
上述的形態(tài)字符串都可以再加一個(gè)b字符,如rb、w+b或ab+等組合,加入b 字符用來告訴函數(shù)庫打開的文件為二進(jìn)制文件,而非純文字文件。不過在POSIX系統(tǒng),包含Linux都會(huì)忽略該字符。由fopen()所建立的新文件會(huì)具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權(quán)限,此文件權(quán)限也會(huì)參考umask 值。
返回值
文件順利打開后,指向該流的文件指針就會(huì)被返回。若果文件打開失敗則返回NULL,并把錯(cuò)誤代碼存在errno 中。
附加說明
一般而言,開文件后會(huì)作一些文件讀取或?qū)懭氲膭?dòng)作,若開文件失敗,接下來的讀寫動(dòng)作也無法順利進(jìn)行,所以在fopen()后請(qǐng)作錯(cuò)誤判斷及處理。

【例程】
#include <stdlib.h>
#include <stdio.h>
#include <dir.h>

int main(void)
{
    char *s;
    char drive[MAXDRIVE];
    char dir[MAXDIR];
    char file[MAXFILE];
    char ext[MAXEXT];
    int flags;

    s=getenv("COMSPEC"); /* get the comspec environment parameter */
    flags=fnsplit(s,drive,dir,file,ext);

    printf("Command processor info:\n");
    if(flags & DRIVE)
       printf("\tdrive: %s\n",drive);
    if(flags & DIRECTORY)
       printf("\tdirectory: %s\n",dir);
    if(flags & FILENAME)
       printf("\tfile: %s\n",file);
    if(flags & EXTENSION)
       printf("\textension: %s\n",ext);

    return 0;
}
 

 

 

fseek
開放分類: 計(jì)算機(jī)語言、計(jì)算機(jī)技術(shù)、編程、程序、函數(shù)

函數(shù)名: fseek
功  能: 重定位流上的文件指針
用  法: int fseek(FILE *stream, long offset, int fromwhere);
程序例:

#include <stdio.h>

long filesize(FILE *stream);

int main(void)
{
   FILE *stream;

   stream = fopen("MYFILE.TXT", "w+");
   fprintf(stream, "This is a test");
   printf("Filesize of MYFILE.TXT is %ld bytes\n", filesize(stream));
   fclose(stream);
   return 0;
}

long filesize(FILE *stream)
{
   long curpos, length;

   curpos = ftell(stream);
   fseek(stream, 0L, SEEK_END);
   length = ftell(stream);
   fseek(stream, curpos, SEEK_SET);
   return length;
}


int fseek( FILE *stream, long offset, int origin );
第一個(gè)參數(shù)stream為文件指針,offset為偏移,比如你要從文件的第10000個(gè)字節(jié)開始讀取的話,offset就應(yīng)該為10000,origin 為標(biāo)志是從文件開始還是末尾。
origin 的取值:
SEEK_CUR Current position of file pointer
SEEK_END End of file
SEEK_SET Beginning of file
那么fseek(fp,-size,1)中-size和1是否應(yīng)理解為,從文件倒說第一個(gè)文件開始讀取
fseek最后一個(gè)參數(shù)最好不要直接指定一個(gè)數(shù)值,比如1,
要使用SEEK_CUR,SEEK_END,SEEK_SET
第二個(gè)參數(shù)表示相對(duì)于第三個(gè)參數(shù)的偏移,整數(shù)表示正向偏移,負(fù)數(shù)表示負(fù)向偏移,比如
fseek(fp,-size,SEEK_CUR);
從當(dāng)前位置向文件后方(比如文件有123三個(gè)數(shù)字,那么2在三的后方,3在2的前方)
fseek(fp,size,SEEK_SET);
從文件開始位置向前移動(dòng)size


這里默認(rèn)size是正數(shù)
 

 

 

 

fwrite
開放分類: 計(jì)算機(jī)語言、計(jì)算機(jī)技術(shù)、編程、程序、函數(shù)

函數(shù)名: fwrite
功  能: 寫內(nèi)容到流中
用  法:fwrite(buffer,size,count,fp);
  (1)buffer:是一個(gè)指針,對(duì)fwrite來說,是要輸出數(shù)據(jù)的地址。
  (2)size:要讀寫的字節(jié)數(shù);
  (3)count:要進(jìn)行讀寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng);
  (4)fp:文件型指針。
程序例:

#include <stdio.h>

struct mystruct
{
  int i;
  char ch;
};

int main(void)
{
   FILE *stream;
   struct mystruct s;

   if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */
   {
      fprintf(stderr, "Cannot open output file.\n");
      return 1;
   }
   s.i = 0;
   s.ch = 'A';
   fwrite(&s, sizeof(s), 1, stream); /* write struct s to file */
   fclose(stream); /* close file */
   return 0;
}
 

 

 

 


fread
開放分類: 計(jì)算機(jī)語言、計(jì)算機(jī)技術(shù)、編程、程序、函數(shù)

函數(shù)名: fread
功  能: 從一個(gè)流中讀數(shù)據(jù)
用  法: int fread(void *ptr, int size, int nitems, FILE *stream);
參  數(shù):用于接收數(shù)據(jù)的地址(字符型指針)(ptr)
        單個(gè)元素的大小(size)
        元素個(gè)數(shù)(nitems)
        提供數(shù)據(jù)的文件指針(stream)
返回值:成功讀取的元素個(gè)數(shù)


程序例:

#include <string.h>
#include <stdio.h>

int main(void)
{
   FILE *stream;
   char msg[] = "this is a test";
   char buf[20];

   if ((stream = fopen("DUMMY.FIL", "w+"))
       == NULL)
   {
      fprintf(stderr,
              "Cannot open output file.\n");
      return 1;
   }

   /* write some data to the file */
   fwrite(msg, strlen(msg)+1, 1, stream);

   /* seek to the beginning of the file */
   fseek(stream, SEEK_SET, 0);

   /* read the data and display it */
   fread(buf, 1, strlen(msg)+1, stream);
   printf("%s\n", buf);

   fclose(stream);
   return 0;
}

 

 

 

 

 

FindFirstFile

void CFindFilesDlg::OnBnClickedButton1()
{
 // TODO: 在此添加控件通知處理程序代碼
 CString c1;
 CString stredit;
 CString strtemp;
 HANDLE hFile;
 WIN32_FIND_DATA fileinfo;
 DWORD errorcode = 0;
 m_Edit1.GetWindowText(c1);   //要熟悉控件的基本使用
 if(!c1.IsEmpty())
 {
       hFile=FindFirstFile("f:\\*.*",&fileinfo);
    while(hFile!=INVALID_HANDLE_VALUE&&errorcode!=ERROR_NO_MORE_FILES)
    {
     //
   strtemp=fileinfo.cFileName;
   stredit=stredit+"\r\n";
   stredit=stredit+strtemp;
   FindNextFile(hFile,&fileinfo);
   errorcode=GetLastError();
    }
    if(errorcode==ERROR_NO_MORE_FILES)
    {
     m_cedit1.SetWindowText(stredit);
     MessageBox("檢索結(jié)束");
    }
    CloseHandle(hFile);
 }
}


在上述代碼中

FindFirstFile第一個(gè)個(gè)參數(shù)需要一個(gè)路徑,但要寫*.*,表示從所有文件中找到的第一個(gè).但寫f:或者f:雙斜杠都返回?zé)o效句柄.

如果f:\\1.txt 則對(duì)特定文件進(jìn)行搜索,返回找到的第一個(gè)

找到的文件的文件結(jié)構(gòu)被記錄在WIN32_FIND_DATA結(jié)構(gòu)體里

FindNextFile第一個(gè)參數(shù)是FindFirstFile的返回值,可以接著上次結(jié)果繼續(xù)尋找

但注意!!!!

但一個(gè)目錄的文件被搜索一遍后,FindNextFile返回的WIN32_FIND_DATA結(jié)構(gòu)體將重復(fù)找到最后一個(gè)找到的文件,而不會(huì)終止.

讓循環(huán)結(jié)束的方法就是找上一次的報(bào)錯(cuò)碼,然后看有沒有ERROR_NO_MORE_FILES信息發(fā)生.

hFile的有效與否個(gè)人覺得還是取決于第一次的FindFirstFile結(jié)果,本程序后半段的運(yùn)行主要還是errorcode!=ERROR_NO_MORE_FILES在控制.

 

 

 


 


 一、 內(nèi)聯(lián)匯編的一般原則:

1、 自由使用通用寄存器;(EAX,EBX,ECX和EDX)
2、 其它寄存器利用堆棧保留,使用,最后恢復(fù);
一般的像下面這樣:

__asm{
 push ebp
 push esp
 ……….//使用EBP和ESP
 pop esp
 pop ebp
}

 二、 內(nèi)聯(lián)匯編__asm可以單獨(dú)使用:
例如:__asm mov eax,anyval1
__asm mov ebx,anyval2

 三、 函數(shù)返回值可以直接放到eax中,可以不理會(huì)警告
例如: int anyfun(……/*anyparm*/)
{
 int irtn; //函數(shù)返回值
 ……        //函數(shù)語句
 __asm mov eax,irtn    //代替return irtn;但編譯器會(huì)發(fā)出警告,可以不理它
}

 四、 內(nèi)聯(lián)匯編不區(qū)分大小寫,語法同普通匯編

例如:__asm{
 mov eax,ebx
 MOV EAX,EBX  //同上一句
}

注意:C++的變量還是區(qū)分大小寫的

 五、 內(nèi)聯(lián)匯編盡量使用__asm或_asm關(guān)鍵字,而不用標(biāo)準(zhǔn)C++的asm關(guān)鍵字(這個(gè)是微軟說的)
以上只是一些關(guān)于內(nèi)聯(lián)匯編的補(bǔ)充,我將出一系列圍繞內(nèi)聯(lián)匯編的文章,下面接著上一次的話題詳細(xì)一點(diǎn)地講一下MMX指令的調(diào)用

1、 MMX指令集簡介:

[數(shù)據(jù)傳輸指令]
movq //傳輸64位整數(shù)
movd //傳輸32位整數(shù)

[數(shù)據(jù)打包轉(zhuǎn)換指令]
PACKSSWB //Pack words into bytes with signed saturation.
PACKSSDW //Pack doublewords into words with signed saturation.
PACKUSWB //Pack words into bytes with unsigned saturation.
PUNPCKHBW //Unpack high-order bytes.
PUNPCKHWD //Unpack high-order words.
PUNPCKHDQ //Unpack high-order doublewords.
PUNPCKLBW //Unpack low-order bytes.
PUNPCKLWD //Unpack low-order words.
PUNPCKLDQ //Unpack low-order doublewords.
注:這一組指令我沒有具體用過,不知道是干什么的,請(qǐng)高手賜教!小弟先謝了!

[ 算術(shù)指令]
PADDB
PADDW
PADDD
PADDSB
PADDSW
PADDUSB
PADDUSW
PSUBB
PSUBW
PSUBD
PSUBSB
PSUBSW
PSUBUSB
PSUBUSW
PMULHW
PMULLW
PMADDWD

[ 比較指令]
PCMPEQB Compare packed bytes for equal.
PCMPEQW Compare packed words for equal.
PCMPEQD Compare packed doublewords for equal.
PCMPGTB Compare packed signed byte integers for greater than.
PCMPGTW Compare packed signed word integers for greater than.
PCMPGTD Compare packed signed doubleword integers for greater than.
這組指令用于成組比較數(shù)據(jù)

[ 位邏輯指令]
PAND Bitwise logical AND.
PANDN Bitwise logical AND NOT.
POR Bitwise logical OR.
PXOR Bitwise logical exclusive OR.
這組指令與AND,XOR基本相同,都是按位進(jìn)行邏輯運(yùn)算。

[ 移位和循環(huán)移位指令]
PSLLW //Shift packed words left logical.
PSLLD //Shift packed doublewords left logical.
PSLLQ //Shift packed quadword left logical.
PSRLW //Shift packed words right logical.
PSRLD //Shift packed doublewords right logical.
PSRLQ //Shift packed quadword right logical.
PSRAW //Shift packed words right arithmetic.
PSRAD //Shift packed doublewords right arithmetic.

[ 狀態(tài)管理指令]
EMMS //Empty MMX state.
在VC中要求所有的MMX指令調(diào)用完畢后都要調(diào)用這個(gè)指令清空
例如:__asm{
 …..MMX 語句
 EMMS   //清空狀態(tài)
}

以上是所有的MMX指令,你可以測(cè)試使用其中的指令,他的工作原理就是單指令,多數(shù)據(jù)
2、 使用MMX指令集的注意事項(xiàng)

由于在CPU內(nèi)部,F(xiàn)PU寄存器和MMX寄存器是同一組寄存器,所以在同時(shí)引用上面寄存器時(shí)要注意正確的狀態(tài)轉(zhuǎn)換,具體做法以后在探討。你只要先記住不能簡單的混合以上兩種指令集即可。
每次調(diào)用之前要先檢測(cè)cpu是否支持MMX指令集,以免發(fā)生異常。具體做法看下列示例:


mov EAX, 1 ; request for feature flags
CPUID ; 0Fh, 0A2h CPUID instruction
test EDX, 00800000h ; Is IA MMX technology bit (Bit 23 of EDX)
; in feature flags set?
jnz MMX_Technology_Found

這段代碼來自Intel的參考手冊(cè),所以你可以放心的使用。

3、 下面用一段示例代碼來說明一下怎樣用MMX指令 __int8 i8_a[2][16];  //字節(jié)操作數(shù),兩組,每組16個(gè)
 __int16 i16_a[8];   //字操作數(shù)
 __int32 i32_a[4];
 __int64 i64_a[2];

 i64_a[0]=0;
 i64_a[1]=0;

 i32_a[0]=1000;
 i32_a[1]=1000;
 i32_a[2]=3;
 i32_a[3]=4;

 i16_a[0]=10;
 i16_a[1]=20;
 i16_a[2]=30;
 i16_a[3]=40;
 i16_a[4]=50;
 i16_a[5]=60;
 i16_a[6]=70;
 i16_a[7]=80;
 
 i8_a[0][0]=1;
 i8_a[0][1]=1;
 i8_a[0][2]=1;
 i8_a[0][3]=1;
 i8_a[0][4]=1;
 i8_a[0][5]=1;
 i8_a[0][6]=1;
 i8_a[0][7]=1;
 i8_a[0][8]=1;
 i8_a[0][9]=1;
 i8_a[0][10]=1;
 i8_a[0][11]=1;
 i8_a[0][12]=1;
 i8_a[0][13]=1;
 i8_a[0][14]=1;
 i8_a[0][15]=1;

 i8_a[1][0]=2;
 i8_a[1][1]=2;
 i8_a[1][2]=2;
 i8_a[1][3]=2;
 i8_a[1][4]=2;
 i8_a[1][5]=2;
 i8_a[1][6]=2;
 i8_a[1][7]=2;
 i8_a[1][8]=2;
 i8_a[1][9]=2;
 i8_a[1][10]=2;
 i8_a[1][11]=2;
 i8_a[1][12]=2;
 i8_a[1][13]=2;
 i8_a[1][14]=2;
 i8_a[1][15]=2;

 __asm{
  movq mm1,[i64_a]
  movq mm2,[i64_a]
  
  movq mm2, [i32_a+8]
  psubd mm2, [i32_a]
  movq [i32_a],mm2
  
  movq mm1,[i16_a]
  paddsw mm1,[i16_a+8]
  movq [i16_a],mm1

  movq mm1,[i8_a]
  movq mm2,[i8_a+8]
  paddb mm1,[i8_a+16]
  paddb mm2,[i8_a+24]
  movq [i8_a],mm1
  movq [i8_a+8],mm2
  
  emms   //最后清除MMX狀態(tài)寄存器,正確返回給系統(tǒng)
 }


你可以通過設(shè)置斷點(diǎn),和watch的方法來觀察寄存器以及變量的變化情況,這里只是引用了一部分的指令,那么最引人注意的是對(duì)i16_a、i8_a、以及i32_a數(shù)組的操作,我是隨便對(duì)他們進(jìn)行了算術(shù)運(yùn)算,大家可以看到我加兩組字節(jié)數(shù)組數(shù)據(jù)時(shí)只用了兩條加指令,這是普通的指令集望塵莫及的。這就是單指令,多數(shù)據(jù)的魅力。同時(shí)你也可以看到對(duì)64位整數(shù)的操作也簡單多了。但是要注意的是,MMX指令集里好像沒有提供除法操作。所以你需借助算法來實(shí)現(xiàn)。另外要補(bǔ)充的是MMX寄存器是從MM0-MM7命名的一組64位寄存器。



sscanf
開放分類: c函數(shù)

名稱:
sscanf() - 從一個(gè)字符串中讀進(jìn)與指定格式相符的數(shù)據(jù).
函數(shù)原型:
Int  sscanf( string str, string fmt, mixed var1, mixed var2 ... );
int  scanf( const char *format [,argument]... );
說明:
sscanf與scanf類似,都是用于輸入的,只是后者以屏幕(stdin)為輸入源,前者以固定字符串為輸入源。
其中的format可以是一個(gè)或多個(gè) {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符號(hào)}
注:
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星號(hào) (*) 表示跳過此數(shù)據(jù)不讀入. (也就是不把此數(shù)據(jù)讀入?yún)?shù)中)
2、{a|b|c}表示a,b,c中選一,[d],表示可以有d也可以沒有d。
3、width表示讀取寬度。
4、{h | l | I64 | L}:參數(shù)的size,通常h表示單字節(jié)size,I表示2字節(jié) size,L表示4字節(jié)size(double例外),l64表示8字節(jié)size。
5、type :這就很多了,就是%s,%d之類。
6、特別的:%*[width] [{h | l | I64 | L}]type 表示滿足該條件的被過濾掉,不會(huì)向目標(biāo)參數(shù)中寫入值
  
支持集合操作:

     %[a-z] 表示匹配a到z中任意字符,貪婪性(盡可能多的匹配)

     %[aB'] 匹配a、B、'中一員,貪婪性

     %[^a] 匹配非a的任意字符,貪婪性

例子:
1. 常見用法。
    char buf[512] = ;
    sscanf("123456 ", "%s", buf);
printf("%s\n", buf);

結(jié)果為:123456

2. 取指定長度的字符串。如在下例中,取最大長度為4字節(jié)的字符串。
    sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);

結(jié)果為:1234

3. 取到指定字符為止的字符串。如在下例中,取遇到空格為止字符串。
    sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);

結(jié)果為:123456

4.  取僅包含指定字符集的字符串。如在下例中,取僅包含1到9和小寫字母的字符串。
    sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf);

結(jié)果為:123456abcdedf

5.  取到指定字符集為止的字符串。如在下例中,取遇到大寫字母為止的字符串。
    sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf);

結(jié)果為:123456abcdedf
  
6、給定一個(gè)字符串iios/12DDWDFF@122,獲取 / 和 @ 之間的字符串,先將 "iios/"過濾掉,再將非'@'的一串內(nèi)容送到buf中
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);
printf("%s\n", buf);

結(jié)果為:12DDWDFF

7、給定一個(gè)字符串““hello, world”,僅保留world。(注意:“,”之后有一空格)
sscanf(“hello, world”,  "%*s%s",  buf);   
printf("%s\n", buf);

結(jié)果為:world

%*s表示第一個(gè)匹配到的%s被過濾掉,即hello被過濾了

如果沒有空格則結(jié)果為NULL。

sscanf的功能很類似于正則表達(dá)式, 但卻沒有正則表達(dá)式強(qiáng)大,所以如果對(duì)于比較復(fù)雜的字符串處理,建議使用正則表達(dá)式.
//-------------------------------------------------------
sscanf,表示從字符串中格式化輸入
上面表示從str中,輸入數(shù)字給x,就是32700
久以前,我以為c沒有自己的split string函數(shù),后來我發(fā)現(xiàn)了sscanf;一直以來,我以為sscanf只能以空格來界定字符串,現(xiàn)在我發(fā)現(xiàn)我錯(cuò)了。
sscanf是一個(gè)運(yùn)行時(shí)函數(shù),原形很簡單:
int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
它強(qiáng)大的功能體現(xiàn)在對(duì)format的支持上。
我以前用它來分隔類似這樣的字符串2006:03:18:
int a, b, c;
sscanf("2006:03:18", "%d:%d:%d", a, b, c);
以及2006:03:18 - 2006:04:18:
char sztime1[16] = "", sztime2[16] = "";
sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);
但是后來,我需要處理2006:03:18-2006:04:18
僅僅是取消了‘-’兩邊的空格,卻打破了%s對(duì)字符串的界定。
我需要重新設(shè)計(jì)一個(gè)函數(shù)來處理這樣的情況?這并不復(fù)雜,但是,為了使所有的代碼都有統(tǒng)一的風(fēng)格,我需要改動(dòng)很多地方,把已有的sscanf替換成我自己的分割函數(shù)。我以為我肯定需要這樣做,并伴隨著對(duì)sscanf的強(qiáng)烈不滿而入睡;一覺醒來,發(fā)現(xiàn)其實(shí)不必。
format-type中有%[]這樣的type field。如果讀取的字符串,不是以空格來分隔的話,就可以使用%[]。
%[]類似于一個(gè)正則表達(dá)式。[a-z]表示讀取a-z的所有字符,[^a-z]表示讀取除a-z以外的所有字符。
所以那個(gè)問題也就迎刃而解了:
sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);
在softmse (Jake) 的問題貼http://community.csdn.net/Expert/topic/4843/4843294.xml?temp=.4321558中 ,周星星給出了一個(gè)很cool的sscanf用例,而后通過學(xué)習(xí),發(fā)現(xiàn)sscanf真棒,現(xiàn)做一總結(jié)。
原問題:
iios/12DDWDFF@122
獲取/和@之間的字符串怎么做
C程序里面有什么函數(shù)嗎?
周星星的代碼:
#include <stdio.h>
int main()
{
const char* s = "iios/12DDWDFF@122";
char buf[20];
sscanf( s, "%*[^/]/%[^@]", buf );
printf( "%s\n", buf );
return 0;
}
結(jié)果為:12DDWDFF
sscanf與scanf類似,都是用于輸入的,只是后者以屏幕(stdin)為輸入源,前者以固定字符串為輸入源。
函數(shù)原型:
int scanf( const char *format [,argument]... );
其中的format可以是一個(gè)或多個(gè) {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符號(hào)},
注:{a|b|c}表示a,b,c中選一,[d],表示可以有d也可以沒有d。

width:寬度,一般可以忽略,用法如:
const char sourceStr[] = "hello, world";
char buf[10] = ;
sscanf(sourceStr, "%5s", buf); //%5s,只取5個(gè)字符
cout << buf<< endl;
結(jié)果為:hello
{h | l | I64 | L}:參數(shù)的size,通常h表示單字節(jié)size,I表示2字節(jié) size,L表示4字節(jié)size(double例外),l64表示8字節(jié)size。
type :這就很多了,就是%s,%d之類。

特別的:
%*[width] [{h | l | I64 | L}]type 表示滿足該條件的被過濾掉,不會(huì)向目標(biāo)參數(shù)中寫入值。如:
const char sourceStr[] = "hello, world";
char buf[10] = ;
sscanf(sourceStr, "%*s%s", buf); //%*s表示第一個(gè)匹配到的%s被過濾掉,即hello被過濾了
cout << buf<< endl;
結(jié)果為:world
支持集合操作:
%[a-z] 表示匹配a到z中任意字符,貪婪性(盡可能多的匹配)
%[aB'] 匹配a、B、'中一員,貪婪性
%[^a] 匹配非a的任意字符,貪婪性
是不是感覺眼熟了啊,不錯(cuò),這和正則表達(dá)式很相似,而且仍然支持過濾,即可以有%*[a-z].如:
星星大哥例子回顧:
const char* s = "iios/12DDWDFF@122";
char buf[20];
sscanf( s, "%*[^/]/%[^@]", buf );
printf( "%s\n", buf );
先將 "iios/"過濾掉,再將非'@'的一串內(nèi)容送到buf中,cool.得到結(jié)果。
PS: 向星星大哥和softmse (Jake) 致謝了,有了你們才有它啊

 

posted @ 2008-08-19 09:14 clcl 閱讀(419) | 評(píng)論 (0)編輯 收藏








   第一篇文章不知道寫什么,就當(dāng)是對(duì)我入行幾個(gè)月的一個(gè)save吧,第一個(gè)項(xiàng)目,2D的地圖編輯器,3個(gè)人一起做的(主程有先搭個(gè)框架),我負(fù)責(zé)的是用OGRE在視圖中顯示地形和物件管理還有阻擋等,后來還做了機(jī)器人的尋路,資源暫時(shí)用的是魔獸(覺得美工做的地形的圖沒有魔獸的美 =  = |||)。
   OGRE確實(shí)是好東西,不過可能是不夠熟悉的原因吧,經(jīng)常被小問題還有沒有考慮到的因素絆了好久,又是上網(wǎng)搜又是群里問才解決。
   額· · · 實(shí)在不知道說什么,先這樣吧,以后慢慢補(bǔ)充·   ·  ·

PS:關(guān)于兩個(gè)房子是透明的是因?yàn)槲以谡{(diào)試OGRE的材質(zhì)里的PASS 中設(shè)置ALPHA通道的幾個(gè)參數(shù)
posted @ 2008-08-18 22:36 clcl 閱讀(413) | 評(píng)論 (2)編輯 收藏

僅列出標(biāo)題
共2頁: 1 2 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            精品成人一区| 亚洲一二三区精品| 亚洲高清在线播放| 国产精品夫妻自拍| 欧美日韩一区在线| 欧美日韩网站| 国产精品一区二区欧美| 国产精品婷婷| 亚洲黄色成人网| 一区二区三区 在线观看视频| 一区电影在线观看| 久久久久久久久久久一区| 免费不卡在线观看av| 日韩一区二区久久| 亚洲无限乱码一二三四麻| 久久国产精品99国产精| 欧美国产视频一区二区| 国产精品v亚洲精品v日韩精品| 国产日韩精品电影| 99国产成+人+综合+亚洲欧美| 午夜一区不卡| 亚洲黄色尤物视频| 久久精品1区| 久久久噜噜噜久久中文字免| 美女脱光内衣内裤视频久久影院| 亚洲区第一页| 欧美影院午夜播放| 亚洲日韩欧美视频一区| 国产视频在线观看一区| 久久久欧美精品| 欧美**人妖| 99视频有精品| 欧美~级网站不卡| 久久久久国产精品人| 国产无一区二区| 久久久噜噜噜久久狠狠50岁| 午夜视频一区在线观看| 国产精品外国| 久久婷婷国产综合精品青草| 亚洲中无吗在线| 国产精品影音先锋| 麻豆精品视频在线观看| 蜜桃av久久久亚洲精品| 亚洲精品中文字幕在线| 亚洲黄页一区| 国产精品欧美久久久久无广告| 亚洲欧美日韩中文在线制服| 欧美一级网站| 在线综合亚洲| 久久精品道一区二区三区| 国户精品久久久久久久久久久不卡 | 欧美亚洲日本网站| 香蕉成人啪国产精品视频综合网| 加勒比av一区二区| 亚洲成人自拍视频| 国产精品高潮呻吟久久av无限 | 亚洲三级色网| 久久久久久久性| 亚洲一区中文| 国产精品久久久久9999高清| 免费视频一区| 激情亚洲成人| 亚洲尤物视频在线| 一本到高清视频免费精品| 亚洲免费在线观看| 亚洲免费影视| 欧美视频在线观看免费| 亚洲六月丁香色婷婷综合久久| 国产日产亚洲精品系列| 99国内精品久久| av72成人在线| 欧美精品一级| 日韩午夜中文字幕| 亚洲一区二区三区在线视频 | 亚洲黄一区二区三区| 国产在线精品成人一区二区三区| 国产精品久久久91| 亚洲激情成人网| 99日韩精品| 国产精品亚发布| 久久电影一区| 免费h精品视频在线播放| 在线成人亚洲| 欧美亚洲一区在线| 久久精品国产一区二区三| 欧美日产国产成人免费图片| 免费短视频成人日韩| 国产伦精品一区二区三区照片91| 西瓜成人精品人成网站| 欧美在线免费| 亚洲美女视频在线免费观看| 国产精品99久久久久久白浆小说| 亚洲精品久久久久久久久久久| 一区二区日韩免费看| 91久久精品国产91久久性色| 亚洲欧美高清| 亚洲日本电影| 国精品一区二区三区| 免费亚洲电影在线| 亚洲一区精品视频| 亚洲精品欧美在线| 另类春色校园亚洲| 欧美一级一区| 午夜精品一区二区三区电影天堂| 激情自拍一区| 激情小说另类小说亚洲欧美| 国产精品乱看| 国产精品一区二区久久精品| 欧美久久视频| 欧美日韩二区三区| 欧美日韩第一页| 欧美性片在线观看| 国产精品免费一区二区三区观看| 久久久一二三| 免费看精品久久片| 欧美激情网友自拍| 欧美日韩亚洲一区二区三区在线 | 欧美国产专区| 麻豆av福利av久久av| 欧美国产精品中文字幕| 欧美激情一区二区三区在线视频| 鲁大师成人一区二区三区| 美国成人毛片| 亚洲欧洲一区二区三区久久| 日韩亚洲欧美一区| 久久国产乱子精品免费女| 久久深夜福利| 国产精品国产自产拍高清av王其| 亚洲毛片在线看| 欧美在线观看网站| 亚洲国产精品电影在线观看| 欧美精品播放| 一区二区高清视频在线观看| 欧美一区二区三区四区高清| 欧美二区在线| 欧美在线免费播放| 国产精品久久久久久久久久三级| 狠狠色2019综合网| 亚洲性图久久| 亚洲精品欧洲精品| 免费一级欧美在线大片| 国产精品免费一区二区三区在线观看| 91久久在线视频| 欧美88av| 欧美~级网站不卡| 亚洲黄色精品| 亚洲日本无吗高清不卡| 嫩草影视亚洲| 亚洲美女av在线播放| 欧美成人一区二区三区在线观看| 午夜精品久久久久久99热软件| 欧美日韩精品三区| 日韩一级大片| 99综合在线| 欧美日韩精品一本二本三本| 亚洲国产婷婷香蕉久久久久久99 | 乱中年女人伦av一区二区| 欧美绝品在线观看成人午夜影视| 国产一二三精品| 另类天堂视频在线观看| 亚洲欧美日韩在线播放| 国产欧美在线看| 久久久久久电影| 久久激情综合网| 亚洲免费观看高清完整版在线观看熊| 久久人人爽人人爽爽久久| 亚洲天堂黄色| 奶水喷射视频一区| 亚洲经典自拍| 国内精品国语自产拍在线观看| 亚洲一区二区三区中文字幕在线| 精品999网站| 免费亚洲一区二区| 欧美黑人一区二区三区| 国产欧美一区二区视频| 久久久久久欧美| 欧美日韩国产小视频在线观看| 亚洲影院色无极综合| 久久国产精品99国产| 亚洲欧洲午夜| 久久精品亚洲| 小黄鸭视频精品导航| 欧美成人激情视频免费观看| 香蕉成人伊视频在线观看 | 亚洲精品在线视频| 亚洲一区二区日本| 亚洲精品一区二区三区蜜桃久| 亚洲一级二级在线| 99re66热这里只有精品3直播| 亚洲淫性视频| 欧美日韩一区综合| 亚洲国产日韩欧美在线99| 国产精品日韩一区二区| 日韩视频在线一区二区三区| 国精品一区二区三区| 久久精品91久久久久久再现| 午夜精品美女自拍福到在线| 欧美私人网站| 亚洲午夜久久久| 亚洲欧美国产精品va在线观看|