Sorry, Here is the correct output: >>> ss= esauth.penc('s') >>> print ss ╣ >>> esauth.pdec(ss) '\xb9' >>> print ss s --> Works fine!!! >>> ss= esauth.penc('s') >>> print ss s >>> ss = esauth.pdec(ss) >>> print ss ╣ --> how did this happen if the param and return values are same? I cannot understand this. Something has todo with ref counts but I don't understand the problem. >>>
On Apr 6, 3:13 pm, k3xji <sum...@gmail.com> wrote: > Hi all, > > This might be a newbie question. I am trying to implement a simple > string decoder/encoder algorithm. Just suppose I am substrcating some > values from the string passed as a parameter to the function and I > want the function to return encoded/decoded version of the string. > > Here is the call: > ss= esauth.penc('s') > st = esauth.pdec(ss) > > static PyObject * > pdec(PyObject *self, PyObject *args) > { > unsigned char *s= NULL; > > unsigned int v,len,i = 0; > > if (!PyArg_ParseTuple(args, "s", &s)) > return NULL; > if (!s) > return NULL; > > len = strlen(s); > > for(i=0;i<len;i++) { > if (s[i] > 10) > s[i] = s[i] - 10; > } > > return Py_BuildValue("s",s); > > } > > This is returning the original string. I mean the parameter is changed > but the Py_BuildValue is returning the original string passed in as > param. > > have dealt with another nmore complex extension and because of the > same string handling problems, I just stop implementing it. Can > somebody please briefly explain the gotchas in Python's string > handling and returning values, cause I am having real trouble with > them. > > Thanks, -- http://mail.python.org/mailman/listinfo/python-list