当前位置: 首页 > 编程日记 > 正文

Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI

Windows环境下Unicode编程总结

UNICODE环境设置
在安装Visual Studio时,在选择VC++时需要加入unicode选项,保证相关的库文件可以拷贝到system32下。


UNICODE编译设置:
C/C++, Preprocessor difinitions 去除_MBCS,加_UNICODE,UNICODE
在ProjectSetting/link/output 中设置Entry为wWinMainCRTStartup
反之为MBCS(ANSI)编译。


Unicode :宽字节字符集


1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?
可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。
调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。


2. 如何对DBCS(双字节字符集)字符串进行操作?
函数 描述
PTSTR CharNext ( LPCTSTR ); 返回字符串中下一个字符的地址
PTSTR CharPrev ( LPCTSTR, LPCTSTR ); 返回字符串中上一个字符的地址
BOOL IsDBCSLeadByte( BYTE ); 如果该字节是DBCS字符的第一个字节,则返回非0值


3. 为什幺要使用Unicode?
(1) 可以很容易地在不同语言之间进行数据交换。
(2) 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。
(3) 提高应用程序的运行效率。
Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那幺系统首先要将字符串转换成Unicode,然后将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结果返回给你的应用程序。进行这些字符串的转换需要占用系统的时间和内存。通过从头开始用Unicode来开发应用程序,就能够使你的应用程序更加有效地运行。
Windows CE 本身就是使用Unicode的一种操作系统,完全不支持ANSI Windows函数
Windows 98 只支持ANSI,只能为ANSI开发应用程序。
Microsoft公司将COM从16位Windows转换成Win32时,公司决定需要字符串的所有COM接口方法都只能接受Unicode字符串。


4. 如何编写Unicode源代码?
Microsoft公司为Unicode设计了WindowsAPI,这样,可以尽量减少代码的影响。实际上,可以编写单个源代码文件,以便使用或者不使用Unicode来对它进行编译。只需要定义两个宏(UNICODE和_UNICODE),就可以修改然后重新编译该源文件。
_UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件。当编译源代码模块时,通常必须同时定义这两个宏。


5. Windows定义的Unicode数据类型有哪些?
数据类型 说明
WCHAR Unicode字符
PWSTR 指向Unicode字符串的指针
PCWSTR 指向一个恒定的Unicode字符串的指针
对应的ANSI数据类型为CHAR,LPSTR和LPCSTR。
ANSI/Unicode通用数据类型为TCHAR,PTSTR,LPCTSTR。

 
6. 如何对Unicode进行操作?
字符集 特性 实例
ANSI 操作函数以str开头 strcpy
Unicode 操作函数以wcs开头 wcscpy
MBCS 操作函数以_mbs开头 _mbscpy
ANSI/Unicode 操作函数以_tcs开头 _tcscpy(C运行期库)
ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数)
所有新的和未过时的函数在Windows2000中都同时拥有ANSI和Unicode两个版本。ANSI版本函数结尾以A表示;Unicode版本函数结尾以W表示。Windows会如下定义:
#ifdef UNICODE
#define CreateWindowEx CreateWindowExW
#else
#define CreateWindowEx CreateWindowExA
#endif // !UNICODE


7. 如何表示Unicode字符串常量?
字符集 实例
ANSI “string”
Unicode L“string”
ANSI/Unicode T(“string”)或_TEXT(“string”)if( szError[0] == _TEXT(‘J’) ){ }


8. 为什幺应当尽量使用操作系统函数?
这将有助于稍稍提高应用程序的运行性能,因为操作系统字符串函数常常被大型应用程序比如操作系统的外壳进程Explorer.exe所使用。由于这些函数使用得很多,因此,在应用程序运行时,它们可能已经被装入RAM。
如:StrCat,StrChr,StrCmp和StrCpy等。


9. 如何编写符合ANSI和Unicode的应用程序?
(1) 将文本串视为字符数组,而不是chars数组或字节数组。
(2) 将通用数据类型(如TCHAR和PTSTR)用于文本字符和字符串。
(3) 将显式数据类型(如BYTE和PBYTE)用于字节、字节指针和数据缓存。
(4) 将TEXT宏用于原义字符和字符串。
(5) 执行全局性替换(例如用PTSTR替换PSTR)。
(6) 修改字符串运算问题。例如函数通常希望在字符中传递一个缓存的大小,而不是字节。这意味着不应该传递sizeof(szBuffer),而应该传递(sizeof(szBuffer)/sizeof(TCHAR)。另外,如果需要为字符串分配一个内存块,并且拥有该字符串中的字符数目,那幺请记住要按字节来分配内存。这就是说,应该调用
malloc(nCharacters *sizeof(TCHAR)),而不是调用malloc(nCharacters)。


10. 如何对字符串进行有选择的比较?
通过调用CompareString来实现。
标志 含义
NORM_IGNORECASE 忽略字母的大小写
NORM_IGNOREKANATYPE 不区分平假名与片假名字符
NORM_IGNORENONSPACE 忽略无间隔字符
NORM_IGNORESYMBOLS 忽略符号
NORM_IGNOREWIDTH 不区分单字节字符与作为双字节字符的同一个字符
SORT_STRINGSORT 将标点符号作为普通符号来处理


11. 如何判断一个文本文件是ANSI还是Unicode?
判断如果文本文件的开头两个字节是0xFF和0xFE,那幺就是Unicode,否则是ANSI。


12. 如何判断一段字符串是ANSI还是Unicode?
用IsTextUnicode进行判断。IsTextUnicode使用一系列统计方法和定性方法,以便猜测缓存的内容。由于这不是一种确切的科学方法,因此 IsTextUnicode有可能返回不正确的结果。


13. 如何在Unicode与ANSI之间转换字符串?
Windows函数MultiByteToWideChar用于将多字节字符串转换成宽字符串;函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。


14. Unicode和DBCS之间的区别
Unicode使用(特别在C程序设计语言环境里)“宽字符集”。「Unicode中的每个字符都是16位宽而不是8位宽。」在Unicode中,没有单单使用8位数值的意义存在。相比之下,在“双位组字符集”中我们仍然处理8位数值。有些位组自身定义字符,而某些位组则显示需要和另一个位组共同定义一个字符。
处理DBCS字符串非常杂乱,但是处理Unicode文字则像处理有秩序的文字。您也许会高兴地知道前128个Unicode字符(16位代码从0x0000到0x007F)就是ASCII字符,而接下来的128个Unicode字符(代码从0x0080到0x00FF)是ISO 8859-1对ASCII的扩展。Unicode中不同部分的字符都同样基于现有的标准。这是为了便于转换。希腊字母表使用从0x0370到0x03FF的代码,斯拉夫语使用从0x0400到0x04FF的代码,美国使用从0x0530到0x058F的代码,希伯来语使用从0x0590到0x05FF的代码。中国、日本和韩国的象形文字(总称为CJK)占用了从0x3000到0x9FFF的代码。Unicode的最大好处是这里只有一个字符集,没有一点含糊。


15.衍生标准
Unicode是一个标准。UTF-8是其概念上的子集,UTF-8是具体的编码标准。而UNICODE是所有想达到世界统一编码标准的标准。UTF-8标准就是Unicode(ISO10646)标准的一种变形方式,
UTF的全称是:Unicode/UCS Transformation Format,其实有两种UTF,一种是UTF-8,一种是UTF-16,
不过UTF-16使用较少,其对应关系如下:
在Unicode中编码为 0000 - 007F 的 UTF-8 中编码形式为: 0xxxxxxx
在Unicode中编码为 0080 - 07FF 的 UTF-8 中编码形式为: 110xxxxx 10xxxxxx
在Unicode中编码为 0000 - 007F 的 UTF-8 中编码形式为: 1110xxxx 10xxxxxx 10xxxxxx


utf-8 unicode的一个新的编码标准,其实unicode有过好几个标准.我们知道一直以来使用的unicode字符内码都是16位,它实际上还不能把全世界的所有字符编在一个平面系统,比如中国的藏文等小语种,所以utf-8扩展到了32位,也就是说理论在utf-8中可容纳二的三十二次方个字符. UNICODE的思想就是想把所有的字符统一编码,实现一个统一的标准.big5、gb都是独立的字符集,这也叫做远东字符集,把它拿到德文版的WINDOWS上可能将会引起字符编码的冲突....早期的WINDOWS默认的字符集是ANSI.notepad中输入的汉字是本地编码,但在NT/2000内部是可以直接支持UNICODE的。notepad.exe在WIN95和98中都是ANSI字符,在NT中则是UNICODE.ANSI和UNICODE可以方便的实现对应映射,也就是转换 ASCII是8位范围内的字符集,对于范围之外的字符如汉字它是无法表达的。unicode是16位范围内的字符集,对于不同地区的字符分区分配,unicode是多个IT巨头共同制定的字符编码标准。如果在unicode环境下比如WINDOWS NT上,一个字符占两字节16位,而在ANSI环境下如WINDOWS98下一个字符占一个字节8位.Unicode字符是16位宽,最多允许65,535字符,数据类型被称为WCHAR。
对于已有的ANSI字符,unicode简单的将其扩展为16位:比如ANSI"A"=0x43,则对应的UNICODE为
"A"= 0x0043
而ASCII用七存放128个字符,ASCII是一个真正的美国标准,所以它不能满足其他国家的需要,例如斯拉夫语的字母和汉字于是出现了Windows ANSI字符集,是一种扩展的ASCII码,用8位存放字符,低128位仍然存放原来的ASCII码,
而高128位加入了希腊字母等
if def UNICODE
  TCHAR = wchar
else
  TCHAR = char

你需要在Project/Settings/C/C++/Preprocesser definitions中添加UNICODE和_UNICODE
UINCODE,_UNICODE都要定义。不定义_UNICODE的话,用SetText(HWND,LPCTSTR),将被解释为SetTextA(HWND,LPTSTR),这时API将把你给的Unicode字符串看作ANSI字符串,显示乱码。因为windows API是已经编译好存在于dll中的,由于不管UNICODE还是ANSI字符串,都被看作一段buffer,如"0B A3 00 35 24 3C 00 00"如果按ANSI读,因为ANSI字串是以'/0'结束的,所以只能读到两字节"0B A3 /0",如果按UNICODE读,将完整的读到'/0/0'结束。
由于UNICODE没有额外的指示位,所以系统必须知道你提供的字串是哪种格式。此外,UNICODE好象是ANSI C++规定的,_UNICODE是windows SDK提供的。如果不编写windows程序,可以只定义UNICODE。
开发过程:


围绕着文件读写、字符串处理展开。文件主要有两种:.txt和.ini文件
1.    在unicode和非unicode环境下字符串做不同处理的,那么需要参考以上9,10两条,以适应不同环境得字符串处理要求。
对文件读写也一样。只要调用相关接口函数时,参数中的字符串前都加上_TEXT等相关宏。如果写成的那个文件需要是unicode格式保存的,那么在创建文件时需要加入一个字节头。
CFile file;
    WCHAR szwBuffer[128];
   
    WCHAR *pszUnicode = L"Unicode string/n"; // unicode string
    CHAR *pszAnsi = "Ansi string/n";                  // ansi string
    WORD wSignature = 0xFEFF;
   
    file.Open(TEXT("Test.txt"), CFile::modeCreate|CFile::modeWrite);
   
    file.Write(&wSignature, 2);
   
    file.Write(pszUnicode, lstrlenW(pszUnicode) * sizeof(WCHAR));
    // explicitly use lstrlenW function
   
    MultiByteToWideChar(CP_ACP, 0, pszAnsi, -1, szwBuffer, 128);
   
    file.Write(szwBuffer, lstrlenW(szwBuffer) * sizeof(WCHAR));
   
file.Close();

//以上这段代码在unicode和非unicode环境下都有效。这里显式的指明用Unicode来进行操作。
2.    在非unicode环境下,缺省调用的都是ANSI格式的字符串,此时TCHAR转换为CHAR类型的,除非显式定义WCHAR。所以在这个环境下,如果读取unicode文件,那么首先需要移动2个字节,然后读取得字符串需要用MultiByteToWideChar来转换,转换后字符串信息才代表unicode数据。
3.    在unicode环境下,缺省调用得都是unicode格式得字符串,也就是宽字符,此时TCHAR转换为WCHAR,相关得API函数也都调用宽字符类型的函数。此时读取unicode文件也和上面一样,但是读取得数据是WCHAR的,如果要转换成ANSI格式,需要调用WideCharToMultiByte。如果读取ANSI的,则不用移动两个字节,直接读取然后视需要转换即可。


某些语言(如韩语)必须在unicode环境下才能显示,这种情况下,在非unicode环境下开发,就算用字符串函数转换也不能达到显示文字的目的,因为此时调用得API函数是用ANSI的(虽然底层都是用UNICODE处理但是处理结果是按照程序员调用的API来显示的)。所以必须用unicode来开发。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Augusdi/archive/2009/10/15/4677533.aspx

=============================================================================

将ANSI转换到Unicode 将Unicode转换到ANSI


将ANSI转换到Unicode  
  (1)通过L这个宏来实现,例如:   CLSIDFromProgID(   L"MAPI.Folder",&clsid);  
  (2)通过MultiByteToWideChar函数实现转换,例如:  
  char   *szProgID   =   "MAPI.Folder";  
  WCHAR   szWideProgID[128];  
  CLSID   clsid;  
  long   lLen   =   MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));  
  szWideProgID[lLen]   =   '/0';    
  (3)通过A2W宏来实现,例如:    
  USES_CONVERSION;    
  CLSIDFromProgID(   A2W(szProgID),&clsid);    
   
  将Unicode转换到ANSI  
  (1)使用WideCharToMultiByte,例如:  
  //   假设已经有了一个Unicode   串   wszSomeString...    
  char   szANSIString   [MAX_PATH];    
  WideCharToMultiByte   (   CP_ACP,   WC_COMPOSITECHECK,   wszSomeString,   -1,   szANSIString,   sizeof(szANSIString),   NULL,   NULL   );    
  (2)使用W2A宏来实现,例如:  
  USES_CONVERSION;  
  pTemp=W2A(wszSomeString);


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Augusdi/archive/2009/10/15/4677487.aspx

转载于:https://www.cnblogs.com/wdpp/archive/2009/12/16/2387036.html

相关文章:

【建模必备】遗传算法的基本原理与步骤(选择)

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

linux下的文件和文件夹的权限问题

1 文件和文件夹的权限 文件和文件夹的权限设置的根本目的是控制人对它们的访问。 2 用户分类 本文件的拥有者、本文件所属的grou、其它用户。 3 也就是说 在读写文件或者文件夹时,要看看自己是属于哪一类用户,然后自己是否拥有相应的权限。当没有相应的权…

linux传文件到xp,Linux与Windows XP之间使用FTP互传文件

我是用虚拟机装了Linux,真实系统是Windows XP,在Windows XP下用Serv-u软件架设了FTP服务器,然后我们就可以在虚拟机的Linux下登录该FTP服务器下载或上传文件了,不同的仅是在Linux下是在命令行里输入相关FTP命令来完成的&#xff0…

.net下的富文本编辑器FCKeditor的配置方法(图)原创

.net下的富文本编辑器FCKeditor的配置方法(图)原创 FCKeditor是一款开源的富文本编辑器,几乎支持所有流行的Web开发语言,版本稳定,用户多,可配置性好。 以前做Java和php的时候就一直用FCKeditor&#xff0c…

SD-WAN行业发展需要VNF演进

与任何成功技术一样,软件定义广域网(SD-WAN)市场正在经历着与市场意识相关的日益增长的困境,很多厂商将这一术语扩展为自己的传统解决方案或者只是将之作为发展的方向,而目前SD-WAN确实是业界发展的趋势。随着广域网逐…

【建模必备】遗传算法的基本原理与步骤(交叉)

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

linux获取近一小时日志,Linux分析日志获取最多访问的前10个IP

apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数。既然是统计,那么awk是必不可少的,好用而高效。命令如下:awk ‘{a[$1] 1;} END {for (i in a) printf("%d %s\…

windows xp远程桌面没有反应

今天发现windows xp远程桌面连接没有反应,看了3389端口都打开了。 日志里面有多条RDPDD.DLL Failed to Load,查了一下结果是ati显卡或nv显卡驱动程序造成的,确实是没想到,呵呵。查到解决方法如下:1.取消硬件加速功能&a…

paramiko 模块封装

paramiko 模块封装 #!/usr/bin/env python#codingutf-8 import paramiko, getpass,sys,traceback class ssh_utils(): def login_by_passwd(self, ip, port, username, passwd): self.ip ip self.port port self.username username self.passwd passwd self.pkey None def…

【建模必备】遗传算法的基本原理与步骤(变异)

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

执行远程linux命令,linux shell 远程执行命令

经常要部署多台服务器上面的应用,如果一个个机器的登录太麻烦。所有就想到编写一个脚本来部署不同的服务器前提条件:配置ssh免登陆如果不会的请参加我的另外一篇文章 http://blog.csdn.net/chenpy/article/details/30281515两个错误:Pseudo-t…

新的工作电脑 神州优雅A550-i7

新的工作电脑,神州优雅A550-i7,也推荐给大家,只想讲给大家买神州很好,一点也不丢脸,不要为了牌子多花钱,世界上80%的笔记本出自中国(包括台湾),我们应该支持价廉物美。 我…

LinkedIn领英发布《2016中国人才趋势报告》

2016年7月12日,职场社交平台LinkedIn(领英)在北京举行了“引领创时代”2016领英ConnectIn峰会,并在会上发布了《2016中国人才趋势报告》。大会邀请到来自埃森哲、滴滴出行、中外运-敦豪国际航空快件有限公司、中国国际航空股份有限…

【建模必备】遗传算法应用举例(简单的一元函数优化实例)

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

linux哪些文件被更新,Linux:如何確定文件是否已被其他進程更新?

6John mentioned the two main routes you can take for watching files under Unix/Linux systems: notification and polling.John提到了在Unix / Linux系統下觀看文件可以采取的兩條主要途徑:通知和輪詢。Notification is when the system itself (usually the kernel) trig…

也谈贝叶斯分类二

源码我已经上传至http://finallyliuyu.download.csdn.net/ 里面包括按洞庭散人的算法实现的Bayes,以及我改进的bayes.还有birdshiver写的二元分词器,这个我也改进了几个bug. 代码比较乱。所以大家要参考我上一篇文章,来做实验 对不住大家了。都是实验性质…

大数据是一座孤单的小岛

大量的数据仍然掌握在个别高薪企事业单位机构中,如何既共享,又保证信息安全,更是挑战。“当前大数据产业存在的问题,一个是商业规则问题,一个是数据交换问题。”数据的属性只有和它的应用结合在一起才有价值&#xff0…

【建模必备】遗传算法应用举例(多元单峰值函数的优化实例)

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

Python在linux服务器上解压,python3传文件到linux服务器然后解压

运维开发网 https://www.qedev.com2020-07-09 10:40出处:网络作者:运维开发网整理#!/usr/bin/env python# -*- coding:utf-8 -*-import osimport paramikoimport timefrom scp import SCPClient相关专题:#!/usr/bin/env python# -*- coding:u…

static构造函数的运行

static构造函数是程序被加载时运行的构造函数。 它的运行不能控制,所以一般不常用。 转载于:https://www.cnblogs.com/jany/archive/2009/12/28/1634529.html

【怎样写代码】向现有类型“添加”方法 -- 扩展方法(一):扩展方法概述

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

VMware中创建Ubuntu16.0.4虚拟桥连方式无法上网

一、问题描述 在本地VMvare中已经安装了两台虚拟机,网络方式都是桥连,上网都可以自动获取IP地址 和HOST主机是一个号段的 ,同为192.168.1.X KingServer1(原始安装) 桥连方式 KingServer2(来自KingServer1的克隆) 今天…

linux设置终端颜色256,如何设置我的Linux X终端以便Emacs可以访问256种颜色?

根据this,除了将TERM设置为xterm-256color之外,还需要ncurses-term库.好的,this还有其他一些尝试:The xterm in Ubuntu Edgy does not advertise 256 color support bydefault. To fix this you need to install a 256 color terminfo entry,and tell xterm to use …

中文版-He Knows My Name(他知道我的名字)-祂认得我-陈熙(音乐河4)

基督教 赞美诗歌 Hymns Lyrics MP3 中文版 英文版 中英对照 MP3音频提取: 词曲:Tommy Walker 写作背景介绍: 歌词: 《他认得我》 有位创造主 他塑造我 早在天地开创之前 生命由祂掌握 他认得我 他了解我的心 他看见我流泪 他听见…

俄罗斯登月计划

近期,随着NASA宣布的几次重大发现,以及NASA公布的未来的一些计划,包括登陆火星甚至在火星上“种森林”等等,似乎都在对外宣布着一件事情:那就是NASA目前在航空航天领域的霸主地位。而作为世界上第一个将宇航员送入太空…

【怎样写代码】向现有类型“添加”方法 -- 扩展方法(二):扩展方法的实现与调用

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

linux 查看域名解析,linux查询服务器域名解析记录

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情什么是弹性…

[转]mysql性能的检查和调优方法

[转]mysql性能的检查和调优方法 来源:http://www.sudone.com/linux/mysql_debug.html作者:Ayou 我一直是使用mysql这个数据库软件,它工作比较稳定,效率也很高。在遇到严重性能问题时,一般都有这么几种可能&#xff1…

【怎样写代码】向现有类型“添加”方法 -- 扩展方法(三):为枚举类型创建方法

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

楚天高速拟12.6亿并购三木智能 涉足物联网领域

楚天高速7月15日晚间发布重组预案,公司拟以4.64元/股发行19008.59万股,并支付现金3.78亿元,合计作价12.6亿元收购三木投资、九番投资等12名交易对方持有的深圳市三木智能股份有限公司(简称“三木智能”)100%股权。公司…