?? t0007.c
字號:
/* FreeTDS - Library of routines accessing Sybase and Microsoft databases * Copyright (C) 1998-1999 Brian Bruns * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#include <stdio.h>#include <tds.h>#include <tdsconvert.h>#include <string.h>static char software_version[] = "$Id: t0007.c,v 1.4 2002/09/01 07:45:29 freddy77 Exp $";static void *no_unused_var_warn[] = {software_version, no_unused_var_warn};static TDSCONTEXT ctx;void test0(const char* test, int len, int dsttype, const char* result){ int i,res; char buf[256]; CONV_RESULT cr; res = tds_convert(&ctx,SYBVARCHAR,test,len,dsttype,0,&cr); if (res == TDS_FAIL) strcpy(buf,"error"); else { switch(dsttype) { case SYBINT1: sprintf(buf,"%d",cr.ti); break; case SYBINT2: sprintf(buf,"%d",cr.si); break; case SYBINT4: sprintf(buf,"%d",cr.i); break; case SYBUNIQUE: sprintf(buf,"%08X-%04X-%04X-%02X%02X%02X%02X" "%02X%02X%02X%02X", cr.u.Data1, cr.u.Data2,cr.u.Data3, cr.u.Data4[0],cr.u.Data4[1], cr.u.Data4[2],cr.u.Data4[3], cr.u.Data4[4],cr.u.Data4[5], cr.u.Data4[6],cr.u.Data4[7]); break; case SYBBINARY: sprintf(buf,"len=%d",res); for(i=0;i<res;++i) sprintf(strchr(buf,0)," %02X",(TDS_UCHAR)cr.ib[i]); break; } } printf("%s\n",buf); if (strcmp(buf,result)!=0) exit(1);}void test(const char* test, int dsttype, const char* result){ test0(test,strlen(test),dsttype,result);}int main(){ memset(&ctx,0,sizeof(ctx)); /* test some conversion */ printf("some checks...\n"); test("1234",SYBINT4,"1234"); test("123",SYBINT1,"123"); test(" - 1234 ",SYBINT2,"-1234"); test(" - 1234 a",SYBINT2,"error"); /* test for overflow */ printf("overflow checks...\n"); test("2147483647",SYBINT4,"2147483647"); test("2147483648",SYBINT4,"error"); test("-2147483648",SYBINT4,"-2147483648"); test("-2147483649",SYBINT4,"error"); test("32767",SYBINT2,"32767"); test("32768",SYBINT2,"error"); test("-32768",SYBINT2,"-32768"); test("-32769",SYBINT2,"error"); test("255",SYBINT1,"255"); test("256",SYBINT1,"error"); test("0",SYBINT1,"0"); test("-1",SYBINT1,"error"); /* test overflow on very big numbers * i use increment of 10^9 to be sure lower 32bit be correct * in a case * */ printf("overflow on big number checks...\n"); test("62147483647",SYBINT4,"error"); test("63147483647",SYBINT4,"error"); test("64147483647",SYBINT4,"error"); test("65147483647",SYBINT4,"error"); /* test not terminated string */ test0("1234",2,SYBINT4,"12"); /* some test for unique */ printf("unique type...\n"); test("12345678-1234-1234-9876543298765432",SYBUNIQUE, "12345678-1234-1234-9876543298765432"); test("{12345678-1234-1E34-9876ab3298765432}",SYBUNIQUE, "12345678-1234-1E34-9876AB3298765432"); test(" 12345678-1234-1234-9876543298765432",SYBUNIQUE, "error"); test(" {12345678-1234-1234-9876543298765432}",SYBUNIQUE, "error"); test("12345678-1234-G234-9876543298765432",SYBUNIQUE, "error"); test("12345678-1234-a234-9876543298765432",SYBUNIQUE, "12345678-1234-A234-9876543298765432"); test("123a5678-1234-a234-98765-43298765432",SYBUNIQUE, "error"); test("123-5678-1234-a234-9876543298765432",SYBUNIQUE, "error"); printf("binary test...\n"); test("0x1234",SYBBINARY,"len=2 12 34"); test("0xaBFd ",SYBBINARY,"len=2 AB FD"); test("AbfD ",SYBBINARY,"len=2 AB FD"); test("0x000",SYBBINARY,"len=2 00 00"); test("0x0",SYBBINARY,"len=1 00"); test("0x100",SYBBINARY,"len=2 01 00"); test("0x1",SYBBINARY,"len=1 01"); return 0;}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -