[Tutor PyCZ] pouziti knihovny v C z pythonu
Michal Molhanec
molsoft na centrum.cz
Pondělí Červenec 4 22:12:15 CEST 2005
teda je to uz dlouho, co jsem neco takovyho psal, ale kdyz vidim, co se
tu deje.
1) kod z tohohle mailu uloz do mycrc.c
2) zkompiluj pomoci
cl -LD mycrc.c -Id:\python24\include -link -LIBPATH:d:\python24\libs
kde d:\python24 je tvoje instalace pythonu (melo by bez problemu
fungovat i v 2.3)
BTW fakt nechapu v cem je ten prikaz horsi nez ten pro gcc ?!?
3) no a pak uz staci
import mycrc
print mycrc.crc("fsdfsdf")
pokud ti nejde nainstalovat VC 6 tak napis, co konkretne ti nejde, jinak
je to debata o nicem
--
Regards,
Michal
ICQ# 175762750
=============================KOD
#include <Python.h>
#define poly 0x8005
#define BITF 0x8000
static PyObject* crc(PyObject* self, PyObject *args)
{
int count;
unsigned char *ptr;
unsigned int i,j;
unsigned short int tmp,val; // 16 Bit
if (!PyArg_ParseTuple(args, "s#" , &ptr, &count)) return NULL;
tmp = *ptr++;
tmp = (tmp<<8) + *ptr++; // first 16 bit value
for (i=count/2;i>0;i--) // only even counts !!! and more than 4
{
if (i>1)
{
val = *ptr++;
val= (val<<8) + *ptr++; // next 16 bit value
}
else
{
val=0; //last valu with 0 // last 16 bit value
}
for (j=0;j<16;j++)
{
if (tmp & BITF)
{
tmp <<= 1;
if (val & BITF)tmp++; // rotate carry
tmp ^= poly;
}
else
{
tmp <<= 1;
if (val & BITF)tmp++; // rotate carry
}
val <<= 1;
}
}
return Py_BuildValue("i" , tmp);
}
static PyMethodDef MyCrcMethods[] = {
{"crc", crc, METH_VARARGS, "My CRC"},
{NULL, NULL,0, NULL} /* Sentinel */
};
PyMODINIT_FUNC initmycrc(void) {
PyObject* module = Py_InitModule3("mycrc", MyCrcMethods, "My CRC");
}
Další informace o konferenci Tutor