C语言字符串转换为Python字符串的方法

问题

怎样将C中的字符串转换为Python字节或一个字符串对象?

解决方案

C字符串使用一对 char *int 来表示, 你需要决定字符串到底是用一个原始字节字符串还是一个Unicode字符串来表示。 字节对象可以像下面这样使用 Py_BuildValue() 来构建:

char *s; /* Pointer to C string data */
int len; /* Length of data */

/* Make a bytes object */
PyObject *obj = Py_BuildValue("y#", s, len);

如果你要创建一个Unicode字符串,并且你知道 s 指向了UTF-8编码的数据,可以使用下面的方式:

PyObject *obj = Py_BuildValue("s#", s, len);

如果 s 使用其他编码方式,那么可以像下面使用 PyUnicode_Decode() 来构建一个字符串:

PyObject *obj = PyUnicode_Decode(s, len, "encoding", "errors");

/* Examples /*
obj = PyUnicode_Decode(s, len, "latin-1", "strict");
obj = PyUnicode_Decode(s, len, "ascii", "ignore");

如果你恰好有一个用 wchar_t *, len 对表示的宽字符串, 有几种选择性。首先你可以使用 Py_BuildValue()

wchar_t *w; /* Wide character string */
int len; /* Length */

PyObject *obj = Py_BuildValue("u#", w, len);

另外,你还可以使用 PyUnicode_FromWideChar() :

PyObject *obj = PyUnicode_FromWideChar(w, len);

对于宽字符串,并没有对字符数据进行解析——它被假定是原始Unicode编码指针,可以被直接转换成Python。

讨论

将C中的字符串转换为Python字符串遵循和I/O同样的原则。 也就是说,来自C中的数据必须根据一些解码器被显式的解码为一个字符串。 通常编码格式包括ASCII、Latin-1和UTF-8. 如果你并不确定编码方式或者数据是二进制的,你最好将字符串编码成字节。 当构造一个对象的时候,Python通常会复制你提供的字符串数据。 如果有必要的话,你需要在后面去释放C字符串。 同时,为了让程序更加健壮,你应该同时使用一个指针和一个大小值, 而不是依赖NULL结尾数据来创建字符串。

以上就是C语言字符串转换为Python字符串的方法的详细内容,更多关于C语言字符串转换为Python字符串的资料请关注我们其它相关文章!

(0)

相关推荐

  • python 转换 Javascript %u 字符串为python unicode的代码

    web采集的数据为 %u6B63%u5F0F%u4EBA%u5458,需要读取并转换为python对象,想了下不调用Javascript去eval,只能自己翻译了. 核心代码: import re import codecs pattern = re.compile('%u[0-9A-Z]{4}') n = codecs.open('d:\\new.txt', 'w', 'utf-8') with open('d:\\p', 'r') as f: for l in f: for i in pat

  • python实现字典(dict)和字符串(string)的相互转换方法

    本文实例讲述了python实现string和dict的相互转换方法.分享给大家供大家参考,具体如下: 字典(dict)转为字符串(string) 我们可以比较容易的将字典(dict)类型转为字符串(string)类型. 通过遍历dict中的所有元素就可以实现字典到字符串的转换: for key, value in sample_dic.items(): print "\"%s\":\"%s\"" % (key, value) 字符串(string

  • Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)

    问题描述 最近做一个项目,是用Python进行相关的串口操作.及将相关指令通过串口发给设备,设备根据发过来的指令来做出相应的操作,所用的库是Pyserial.在最初开发时,出现的问题在于:别人给的文档里面的命令是十六进制的.例如,给出一个指令: 5aa5 07 82 1000 3132 3334 . 那么,我们需要思考的是,我们如何将上面的指令,转换为pyserial库进行写操作时(write)所需要的bytes类型. 解决方法 首先,我们需要知道的是,我们首先,需要用字符串构造成上面的指令,然

  • python中将\\uxxxx转换为Unicode字符串的方法

    今天碰到一个很有意思的问题,需要将普通的 Unicode字符串转换为 Unicode编码的字符串,如下: 将 \\u9500\\u552e 转化为 \u9500\u552e 也就是 销售 . 乍一看感觉挺简单的,用 re 库将前面的反斜杠去掉即可,但是在替换的过程中会抛出如下错误: Traceback (most recent call last):   File "<pyshell#15>", line 1, in <module>     re.sub(r&

  • python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)

    python3 json数据格式的转换(dumps/loads的使用.dict to str/str to dict.json字符串/字典的相互转换) Python3 JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码. json.loads(): 对数据进

  • python 将字符串转换成字典dict的各种方式总结

    1)利用eval可以将字典格式的字符串与字典户转 >>>mstr = '{"name":"yct","age":10}' 转换为可以用的字典: >>>eval(mstr), type( eval(mstr) ) {"name":"yct","age":10}, dict 2).JSON到字典转化: >>>dictinfo = json

  • python 将字符串转换成字典dict

    复制代码 代码如下: JSON到字典转化:dictinfo = simplejson.loads(json_str) 输出dict类型 字典到JSON转化:jsoninfo = simplejson.dumps(dict)输出str类型 比如:info = {'name' : 'jay', 'sex' : 'male', 'age': 22}jsoninfo = simplejson.dumps(info)print jsoninfo print type(jsoninfo)

  • Python 十六进制整数与ASCii编码字符串相互转换方法

    在使用Pyserial与STM32进行通讯时,遇到了需要将十六进制整数以Ascii码编码的字符串进行发送并且将接收到的Ascii码编码的字符串转换成十六进制整型的问题.查阅网上的资料后,均没有符合要求的,遂结合各家之长,用了以下方法. 环境 Python2.7 + Binascii模块 十六进制整数转ASCii编码字符串 # -*- coding: utf-8 -*- import binascii #16进制整数转ASCii编码字符串 a = 0x665554 b = hex(a) #转换成相

  • C语言字符串转换为Python字符串的方法

    问题 怎样将C中的字符串转换为Python字节或一个字符串对象? 解决方案 C字符串使用一对 char * 和 int 来表示, 你需要决定字符串到底是用一个原始字节字符串还是一个Unicode字符串来表示. 字节对象可以像下面这样使用 Py_BuildValue() 来构建: char *s; /* Pointer to C string data */ int len; /* Length of data */ /* Make a bytes object */ PyObject *obj

  • 如何将Python字符串转换为JSON的实现方法

    目录 什么是 JSON 在哪里使用JSON 基本的 JSON 语法 如何在 Python 中处理 JSON 数据 包含 JSON 模块 使用 json.loads() 函数 总结 在本教程中,你将学习 JSON 的基础知识--它是什么.常用在哪里以及它的语法. 你还将看到如何在 Python 中将字符串转换为 JSON. 让我们开始吧! 什么是 JSON JSON 是 JavaScript Object Notation(JavaScript 对象标记)的缩写. 它是一种数据格式,用于为 Web

  • C++实现十六进制字符串转换为十进制整数的方法

    本文实例讲述了C++实现十六进制字符串转换为十进制整数的方法.分享给大家供大家参考.具体实现方法如下: /* * 将十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值 */ #include <stdio.h> #include <math.h> /* 将十六进制中的字符装换为对应的整数 */ int hexchtoi(char hexch ) { char phexch[] = "ABCDEF"; char qhexch[] = &qu

  • 通过字符串导入 Python 模块的方法详解

    我们平时导入第三方模块的时候,一般使用的是 import 关键字,例如: import scrapy from scrapy.spider import Spider 但是如果各位同学看过 Scrapy 的 settings.py 文件,就会发现里面会通过字符串的方式来指定pipeline 和 middleware,例如: DOWNLOADER_MIDDLEWARES = { 'Test.middlewares.ExceptionRetryMiddleware': 545, 'Test.midd

  • 对json字符串与python字符串的不同之处详解

    API的应用通常会处理json数据,刚好今天看到了json字符串和python字符串的区别,放一段代码,区别一下子就看出来,的确json 库为处理Json 数据提供了不少的便利. import json jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{"number":2}],"arrayOfFruits":[{"fruit&quo

  • js 将json字符串转换为json对象的方法解析

    例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象: var str2 = { "name": "cxh", "sex": "man" }; 一.JSON字符串转换为JSON对象 要使用上面的str1,必须使用下面的方法先转化为JSON对象: //由JSON字符串转换为

  • asp实现二进制字符串转换为Unicode字符串

    若需要utf-8格式,请自行将下面的GB2312改成utf-8. ' 二进制转字符串,否则会出现乱码的!  Function sTb(vin)         Const adTypeText = 2         Dim BytesStream,StringReturn         Set BytesStream = Server.CreateObject("ADODB.Stream")  With BytesStream        .Type = adTypeText  

  • Python字符串拼接、截取及替换方法总结分析

    本文实例讲述了Python字符串拼接.截取及替换方法.分享给大家供大家参考,具体如下: python字符串连接 python字符串连接有几种方法,我开始用的第一个方法效率是最低的,后来看了书以后就用了后面的2种效率高的方法,跟大家分享一下. 先介绍下效率比较低的方法: a = ['a','b','c','d'] content = '' for i in a: content = content + i print content content的结果是:'abcd' 后来我看了书以后,发现书上

  • 分享Python字符串关键点

    字符串是 Python 中最常用的数据类型.我们可以使用引号来创建字符串.python字符串关键点有下面几点: 1.一些引号分隔的字符 你可以把字符串看出是Python的一种数据类型,在Python单引号或者双引号之间的字符数组或者连续的字符集合.在python中最常用的引号为('')和("").两者的功能是一样的,字符串的实际内容是引号之间的字符,不包含引号本身. 2.不可分字符类型 字符串是唯一的字面上的字符序列类型.不过,字符本身并不是一种类型,所以,字符串是字符存储操作的最基本

  • js将键值对字符串转为json字符串的方法

    要转化的键值对字符 var respDesc="cardid=64157001&cardnum=1&sporder_id=PD12160428120635001&sporder_time=20160526101552": var newstr = respDesc.replace("=",":\""); var stringObj= "{" +newstr.replace("&

随机推荐