ord('a') 97 chr(97) 'a' unichr(97) u'a'
Category Archives: Language
Perl与Oracle10g环境变量冲突
安装好Perl和Oracle10g后,
运行Perl时会发现,lib路径经常会找到Oracle10g下面去,
解决方法:
修改Perl5Lib环境变量到Perl安装路径下
@color 02 @title Perl5 @set PATH=D:\Perl\bin;%PATH% @set Perl5Lib="D:\Perl\lib" @echo Perl5 Enviroment OK!
Python遍历文件夹
import os def walk_dir(targetdir,topdown=True): for root, dirs, files in os.walk(targetdir, topdown): for name in files: print(os.path.join(name)) for name in dirs: print(os.path.join(name)) #Let's start here walk_dir("D:\",fileinfo)
Python使用MySQL驱动
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb db=MySQLdb.connect(host="127.0.0.1",port=3306,db="django",user="sa",passwd="sa") cur=db.cursor() cur.execute("select count(*) from djuser") print("rowcount=",cur.rowcount) rows=cur.fetchall() for row in rows: print("%s" % (row[0]))
Python使用ODBC
#!/usr/bin/python # -*- coding: utf-8 -*- import ceODBC con=ceODBC.connect('driver=MySQL ODBC 5.1 Driver;server=127.0.0.1;port=3306;database=django;uid=sa;pwd=sa;') cur=ceODBC.Cursor(con) cur.execute("SELECT count(*) FROM djuser") rows=cur.fetchall() for row in rows: print(row[0])
Python调用dll
1.Test.h
#ifndef TEST_INTADD_HEADER #define TEST_INTADD_HEADER extern "C" int WINAPIV IntAdd(int a,int b); #endif
2.Test.cpp
#include <windows.h> #include "Test.h" BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved) { UNREFERENCED_PARAMETER(hinstDLL); UNREFERENCED_PARAMETER(lpReserved); switch(fdwReason) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; } extern "C" int WINAPIV IntAdd(int a,int b) { return a+b; }
3.Test.def
LIBRARY "Test" EXPORTS IntAdd
4.test_cdll.py
#test_cdll.py #请用__cdecl调用约定而不是__stdcall from ctypes import * fileName="Test.dll" Test=cdll.LoadLibrary(fileName) print(Test.IntAdd(2,3))
JAAS配置
1.web.xml
<!-- JAAS认证 --> <security-constraint> <web-resource-collection> <web-resource-name>protected-resource</web-resource-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.action</url-pattern> <http-method>HEAD</http-method> <http-method>GET</http-method> <http-method>POST</http-method> <http-method>PUT</http-method> <http-method>DELETE</http-method> </web-resource-collection> <auth-constraint> <role-name>NEOJAAS</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> <security-role> <description>JAASTest Roles</description> <role-name>NEOJAAS</role-name> </security-role>
2.login.jsp
<form method="post" action="j_security_check"] <label>用户名</label> <input name="j_username" type="text" maxlength="32" class="login-text"/> <label>密 码</label> <input name="j_password" type="password" maxlength="32" class="login-text"/> <input type="submit" class="stuff" value="登 录" /> </form>
打开Led闪光灯
#import <AVFoundation/AVFoundation.h> -(IBAction)btnClicked:(id)sender { AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if ([device hasTorch]) { if(AVCaptureTorchModeOn==[device torchMode]) { [btn setTitle:@"Turn On" forState:UIControlStateNormal]; [device lockForConfiguration:nil]; [device setTorchMode: AVCaptureTorchModeOff]; [device unlockForConfiguration]; } else if(AVCaptureTorchModeOff==[device torchMode]) { [btn setTitle:@"Turn Off" forState:UIControlStateNormal]; [device lockForConfiguration:nil]; [device setTorchMode: AVCaptureTorchModeOn]; [device unlockForConfiguration]; } } }
VC计算CString摘要
1、VC计算字符串MD5摘要
//输入:要计算摘要的字符串 //输出:128位MD5摘要 #include <wincrypt.h> CString szResult; CString CDigestDlg::CalcMD5(CString strContent) { DWORD dwLength=0; BYTE* pbContent=NULL; dwLength = (DWORD)strContent.GetLength(); pbContent = new BYTE[dwLength]; memcpy(pbContent,strContent.GetBuffer(dwLength),dwLength); //计算MD5编码 HCRYPTPROV hCryptProv; HCRYPTHASH hHash; BYTE byteMD5[16]; DWORD dwHashLen=16; CString szResult; if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) { if(CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash)) { if(CryptHashData(hHash, pbContent, dwLength, 0)) { if(CryptGetHashParam(hHash, HP_HASHVAL, byteMD5, &dwHashLen, 0)) { szResult.Format(TEXT("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"), byteMD5[0],byteMD5[1],byteMD5[2],byteMD5[3],byteMD5[4],byteMD5[5],byteMD5[6],byteMD5[7] ,byteMD5[8],byteMD5[9],byteMD5[10],byteMD5[11],byteMD5[12],byteMD5[13],byteMD5[14],byteMD5[15]); } else { szResult=TEXT("Error getting hash param"); } } else { szResult=TEXT("Error hashing data"); } } else { szResult=TEXT("Error creating hash"); } } else { szResult=TEXT("Error acquiring context"); } CryptDestroyHash(hHash); CryptReleaseContext(hCryptProv, 0); delete[] pbContent; pbContent=NULL; return szResult; }
2、VC计算字符串SHA1摘要
//输入:要计算摘要的字符串 //输出:160位SHA1摘要 #include <wincrypt.h> CString szResult; CString CDigestDlg::CalcSHA1(CString strContent) { DWORD dwLength=0; BYTE* pbContent=NULL; dwLength = (DWORD)strContent.GetLength(); pbContent = new BYTE[dwLength]; memcpy(pbContent,strContent.GetBuffer(dwLength),dwLength); //计算MD5编码 HCRYPTPROV hCryptProv; HCRYPTHASH hHash; BYTE byteSHA1[20]; DWORD dwHashLen=20; CString szResult; if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) { if(CryptCreateHash(hCryptProv, CALG_SHA1, 0, 0, &hHash)) { if(CryptHashData(hHash, pbContent, dwLength, 0)) { if(CryptGetHashParam(hHash, HP_HASHVAL, byteSHA1, &dwHashLen, 0)) { szResult.Format(TEXT("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"), byteSHA1[0],byteSHA1[1],byteSHA1[2],byteSHA1[3],byteSHA1[4],byteSHA1[5],byteSHA1[6],byteSHA1[7], byteSHA1[8],byteSHA1[9],byteSHA1[10],byteSHA1[11],byteSHA1[12],byteSHA1[13],byteSHA1[14],byteSHA1[15], byteSHA1[16],byteSHA1[17],byteSHA1[18],byteSHA1[19]); } else { szResult=TEXT("Error getting hash param"); } } else { szResult=TEXT("Error hashing data"); } } else { szResult=TEXT("Error creating hash"); } } else { szResult=TEXT("Error acquiring context"); } CryptDestroyHash(hHash); CryptReleaseContext(hCryptProv, 0); delete[] pbContent; pbContent=NULL; return szResult; }
VC计算文件摘要
1、VC计算文件MD5摘要
//输入:文件路径 //输出:128位MD5摘要 #include <wincrypt.h> CString szResult; CString CMD5AndSHA1Dlg::CalcMD5(CString strFilePath) { //读取文件 CFile inFile; CFileException ex; DWORD dwLength=0; BYTE* pbContent=NULL; BOOL bRet; bRet=inFile.Open(strFilePath,CFile::modeRead | CFile::typeBinary | CFile::shareDenyWrite,&ex); if(bRet==FALSE) { return TEXT("Error opening file");; } dwLength = (DWORD)inFile.GetLength(); pbContent = new BYTE[dwLength]; if(pbContent==NULL) { return TEXT("Error not enough memory");; } inFile.Read(pbContent,dwLength); inFile.Close(); //计算MD5编码 HCRYPTPROV hCryptProv; HCRYPTHASH hHash; BYTE byteMD5[16]; DWORD dwHashLen=16; CString szResult; if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) { if(CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash)) { if(CryptHashData(hHash, pbContent, dwLength, 0)) { if(CryptGetHashParam(hHash, HP_HASHVAL, byteMD5, &dwHashLen, 0)) { szResult.Format(TEXT("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"), byteMD5[0],byteMD5[1],byteMD5[2],byteMD5[3],byteMD5[4],byteMD5[5],byteMD5[6],byteMD5[7] ,byteMD5[8],byteMD5[9],byteMD5[10],byteMD5[11],byteMD5[12],byteMD5[13],byteMD5[14],byteMD5[15]); } else { szResult=TEXT("Error getting hash param"); } } else { szResult=TEXT("Error hashing data"); } } else { szResult=TEXT("Error creating hash"); } } else { szResult=TEXT("Error acquiring context"); } CryptDestroyHash(hHash); CryptReleaseContext(hCryptProv, 0); delete[] pbContent; pbContent=NULL; return szResult; }
2、VC计算文件SHA1摘要
//输入:文件路径(文件必须小于2^64bit) //输出:160位SHA1摘要 #include <wincrypt.h> CString szResult; CString CMD5AndSHA1Dlg::CalcSHA1(CString strFilePath) { //读取文件 CFile inFile; CFileException ex; DWORD dwLength=0; BYTE* pbContent=NULL; BOOL bRet; bRet=inFile.Open(strFilePath,CFile::modeRead | CFile::typeBinary | CFile::shareDenyWrite,&ex); if(bRet==FALSE) { return TEXT("Error opening file");; } dwLength = (DWORD)inFile.GetLength(); pbContent = new BYTE[dwLength]; if(pbContent==NULL) { return TEXT("Error not enough memory");; } inFile.Read(pbContent,dwLength); inFile.Close(); //计算MD5编码 HCRYPTPROV hCryptProv; HCRYPTHASH hHash; BYTE byteSHA1[20]; DWORD dwHashLen=20; CString szResult; if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) { if(CryptCreateHash(hCryptProv, CALG_SHA1, 0, 0, &hHash)) { if(CryptHashData(hHash, pbContent, dwLength, 0)) { if(CryptGetHashParam(hHash, HP_HASHVAL, byteSHA1, &dwHashLen, 0)) { szResult.Format(TEXT("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"), byteSHA1[0],byteSHA1[1],byteSHA1[2],byteSHA1[3],byteSHA1[4],byteSHA1[5],byteSHA1[6],byteSHA1[7], byteSHA1[8],byteSHA1[9],byteSHA1[10],byteSHA1[11],byteSHA1[12],byteSHA1[13],byteSHA1[14],byteSHA1[15], byteSHA1[16],byteSHA1[17],byteSHA1[18],byteSHA1[19]); } else { szResult=TEXT("Error getting hash param"); } } else { szResult=TEXT("Error hashing data"); } } else { szResult=TEXT("Error creating hash"); } } else { szResult=TEXT("Error acquiring context"); } CryptDestroyHash(hHash); CryptReleaseContext(hCryptProv, 0); delete[] pbContent; pbContent=NULL; return szResult; }