﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-canaan</title><link>http://www.cppblog.com/chinapeter2008/</link><description>c++爱好者</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 14:14:22 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 14:14:22 GMT</pubDate><ttl>60</ttl><item><title>ONVIF协议云台服务规范(三)-移动操作 ONVIF PTZ Service Specification-Move Operations</title><link>http://www.cppblog.com/chinapeter2008/archive/2021/06/19/217721.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Sat, 19 Jun 2021 12:38:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2021/06/19/217721.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/217721.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2021/06/19/217721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/217721.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/217721.html</trackback:ping><description><![CDATA[<h2>5.3&nbsp;&nbsp; &nbsp;移动操作<br /></h2><p>&nbsp;&nbsp;&nbsp; 本节介绍三种移动PTZ单元操作，绝对、相对或移动。所有操作都需要profile token，引用PTZ配置中的Media Profile。<br /></p><p>&nbsp;&nbsp; &nbsp;所有移动命令应以非阻塞方式执行，表示不应等到请求的移动操作完成。新的移动请求可以覆盖最后的移动操作。</p><p>&nbsp;&nbsp; &nbsp;由于本规范涉及的物理设备范围广泛，因此本规范不要求对PTZ移动操作的特定相应时间。但是设备应尽量减少PTZ移动命令响应的延迟。设备没有完全控制PTZ控制输入和设备移动的滞后。网络与客户端的延迟会增加滞后。实现应该尽快减少设备的延迟。</p><p>5.3.1.&nbsp;&nbsp; &nbsp;绝对移动（AbsoluteMove）<br />&nbsp;&nbsp; &nbsp;如果PTZ节点支持绝对水平/俯仰或绝对变焦的移动，则应支持绝对移动操作。这个命令的位置参数指定PTZ单元要移动的绝对位置。它分为一个可选的水平/俯仰元素和一个可选的变焦元素。如果忽略了水平/俯仰位置，则当前的水平/俯仰运动不受此命令的影响。变焦也是同样的原理。</p><p>&nbsp;&nbsp; &nbsp;PTZ节点支持的绝对位置空间，如果省略了空间信息，则PTZ配置的相应的默认空间，采用指定控件的媒体属性。设备仅为有绝对位置空间提供支持绝对水平/俯仰或变焦的服务。现有的移动操作命令中的速度参数比PTZ配置中的默认速度优先级要高。如果空间引用了速度参数，那么需要支持PTZ节点支持的速度空间。</p><p>&nbsp;&nbsp; &nbsp;如果无法达到所要求的绝对位置，操作将失败。</p><p><strong>请求（REQUEST）:</strong><br />&#8226; ProfileToken [tt:ReferenceToken]<br />对现有媒体配置文件的引用<br />&#8226; Position [tt:PTZVector]<br />指定绝对目标位置的矢量<br />&#8226; Speed &#8211; 可选[tt:PTZSpeed]<br />可选速度矢量<br /><strong>响应（RESPONSE）</strong>: 空消息<br /><strong>错误（FAULTS）</strong>：<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoProfile<br />请求的配置文件token内ProfileToken不存在。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoPTZProfile<br />请求的配置文件token未引用PTZ配置。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported<br />引用了PTZ节点不支持的空间。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:InvalidPosition<br />请求的位置超出了界限。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:InvalidSpeed<br />请求的速度超出了界限。<br /><strong>访问权限类（ACCESS CLASS）</strong>：<br />ACTUATE<br /></p><h3>5.3.2.&nbsp;&nbsp; &nbsp;相对移动（RelativeMove）<br /></h3><p>&nbsp;&nbsp;&nbsp; 如果PTZ节点支持相对水平/俯仰或相对变焦移动，则需要支持相对移动（RelativeMove）操作。此操作的转换参数指定当前位置与要移动的位置的插值。该操作可分为一个可选的水平/俯仰元素和一个可选的变焦参数。如果水平/俯仰忽略掉了，那么当前的水平/俯仰位置不会受此命令的影响。变焦元素也同样。<br />&nbsp;&nbsp; &nbsp;转换元素中引用的空间应该为PTZ节点支持的转换空间。如果转换参数的空间信息忽略掉了，那么将根据PTZ配置的默认空间。设备需要支持相对水平/俯仰移动，相对变焦移动或不支持相对运动。<br />&nbsp;&nbsp; &nbsp;在请求移动的命令中携带的速度参数优先于PTZ配置中的默认速度。如果空间引用了速度参数，则PTZ节点需要支持速度空间。<br />&nbsp;&nbsp; &nbsp;通过发送水平/俯仰和变焦0值命令可以在当前位置停止PTZ单元。停止应具有与引用相对空间完全相同的效果。<br />&nbsp;&nbsp; &nbsp;如果请求转换后的绝对位置是无法到达的，那么PTZ节点需要移动最接近的有效位置。<br /><strong>请求（REQUEST）:</strong><br />&#8226; ProfileToken [tt:ReferenceToken]<br />对现有媒体配置文件的引用<br />&#8226; Translation [tt:PTZVector]<br />指定相对于当前位置的位置平移的向量<br />&#8226; Speed &#8211; 可选[tt:PTZSpeed]<br />可选速度矢量<br /><strong>响应（RESPONSE）</strong>: 空消息<br /><strong>错误（FAULTS）</strong>：<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoProfile<br />请求的配置文件token内ProfileToken不存在。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoPTZProfile<br />请求的配置文件token未引用PTZ配置。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported<br />引用了PTZ节点不支持的空间。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:InvalidTranslation<br />请求的转换超出了界限。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:InvalidSpeed<br />请求的速度超出了界限。<br /><strong>访问权限类（ACCESS CLASS）</strong>：<br />ACTUATE<br /></p><h3>5.3.3.&nbsp;&nbsp; &nbsp;连续移动（ContinuousMove）<br /></h3><p>&nbsp;&nbsp;&nbsp; 具有PTZ功能的设备应支持连续移动。此命令的速度参数为水平/俯仰和缩放指定的有符号的速度值。组合的水平/俯仰元素及变焦元素也是可选的。如果水平/俯仰元素忽略掉了，当前的水平/俯仰元素则不受此命令的影响。变焦元素也是如此。引用有速度元素的空间的PTZ节点需要支持速度空间。如果速度参数忽略掉了空间信息，那么采用相应的指定媒体文件的PTZ配置的默认空间。设备通过仅为支持的情况提供速度空间来支持连续水平/俯仰移动和连续变焦动作。<br />&nbsp;&nbsp; &nbsp;当前移动操作的超时参数优先于相应PTZ配置的默认超时参数。超时参数决定PTZ节点的连续移动的时间。<br />&nbsp;&nbsp; &nbsp;当0作为该轴的连续移动参数时，设备应停止在特定轴（水平，俯仰或变焦）的移动。引用的速度空间也应有独立的停止功能。这个命令在连续移动的影响与在5.3.5节中的停止命令是一样的。<br />&nbsp;&nbsp; &nbsp;请求的速度得到的绝对位置是不能到达的，则PTZ节点应移动到最接近的能到达的位置。连续移动操作的典型应用是通过操纵杆控制PTZ。<br /><strong>请求（REQUEST）:</strong><br />&#8226; ProfileToken [tt:ReferenceToken]<br />对现有媒体配置文件的引用<br />&#8226; Velocity [tt:PTZSpeed]<br />速度矢量指定水平，俯仰和变焦的速度。<br />&#8226; Timeout&#8211; 可选[tt:duration]<br />可选超时<br /><strong>响应（RESPONSE）</strong>: 空消息<br /><strong>错误（FAULTS）</strong>：<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoProfile<br />请求的配置文件token内ProfileToken不存在。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoPTZProfile<br />请求的配置文件token未引用PTZ配置。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported<br />引用了PTZ节点不支持的空间。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:InvalidTranslation<br />请求的转换超出了界限。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:TimeoutNotSupported<br />指定的超时参数不在支持的超时时间范围内。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:InvalidSpeed<br />请求的速度超出了界限。<br /><strong>访问权限类（ACCESS CLASS）</strong>：<br />ACTUATE<br /></p><h3>5.3.4.&nbsp;&nbsp; &nbsp;地理移动（GeoMove）<br /></h3><p>&nbsp;&nbsp;&nbsp; 设备有GeoMove信号，则PTZ节点需要支持这类命令。<br />&nbsp;&nbsp; &nbsp;可选的AreaHeight和AreaWidth参数可以添加到参数中，所以PTZ设备可以决定变焦因子。如果没有提供AreaHeight和AreaWidth，该单元将不会更改变焦。AreaHeight和AreaWidth用米来表示。<br />&nbsp;&nbsp; &nbsp;请求的转换过程中的速度参数优先于相应的PTZ配置的默认速度。如果引用的空间含有速度参数，那么PTZ节点应支持速度空间。<br />&nbsp;&nbsp; &nbsp;如果PTZ设备不支持自动检索地理位置，那么在执行地理引用命令之前使用SetGeoLocation进行设置。客户端如果在设备设置地理位置之前发送GeoMove命令，设备应返回一个错误。<br />&nbsp;&nbsp; &nbsp;取决于PTZ设备的运动方式，请求的位置可能无法到达。这种情况下设备应返回一个错误，表示由于物理限制无法执行请求的操作。<br /><strong>请求（REQUEST）:</strong><br />&#8226; ProfileToken [tt:ReferenceToken]<br />对现有媒体配置文件的引用<br />&#8226; Target [tt:GeoLocation]<br />目标坐标。<br />&#8226; Speed &#8211; 可选[tt:PTZSpeed]<br />指定水平，俯仰和变焦的速度矢量。<br />&#8226; AreaWidth &#8211; 可选[xs:float]<br />要显示的可选区域。<br />&#8226; AreaHeight &#8211; 可选[xs:float]<br />要显示的可选区域。<br /></p><p><strong>响应（RESPONSE）</strong>: 空消息<br /><strong>错误（FAULTS）</strong>：<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoProfile<br />请求的配置文件token内ProfileToken不存在。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoPTZProfile<br />请求的配置文件token未引用PTZ配置。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:GeoMoveNotSupported<br />设备不支持地理移动。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:UnreachablePosition<br />请求的转换超出了界限。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:TimeoutNotSupported<br />指定的超时参数不在支持的超时时间范围内。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:GeoLocationUnknown<br />由于地理位置未配置或不可用，该单元无法执行GeoMove。<br /><strong>访问权限类（ACCESS CLASS）</strong>：<br />ACTUATE<br /></p><h3>5.3.5.&nbsp;&nbsp; &nbsp;停止（Stop）<br /></h3><p>&nbsp;&nbsp;&nbsp; PTZ设备需支持停止操作。如果没有指定停止的参数，那么这个命令将停止所有正在进行的水平，俯仰和变焦动作。通过指定相应的停止参数可以停止对应的操作。<br /><strong>请求（REQUEST）:</strong><br />&#8226; ProfileToken [tt:ReferenceToken]<br />对现有媒体配置文件的引用<br />&#8226; PanTilt &#8211; 可选[xs:boolean]<br />停止水平和俯仰操作（默认为true）。<br />&#8226; Zoom &#8211; 可选[xs:boolean]<br />停止变焦操作（默认为true）。<br />响应（RESPONSE）: 空消息<br /><strong>错误（FAULTS）</strong>：<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoProfile<br />请求的配置文件token内ProfileToken不存在。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoPTZProfile<br />请求的配置文件token未引用PTZ配置。<br /><strong>访问权限类（ACCESS CLASS）</strong>：<br />ACTUATE<br /></p><h3>5.3.6.&nbsp;&nbsp; &nbsp;移动并开始跟踪（MoveAndStartTracking）<br /></h3><p>&nbsp;&nbsp;&nbsp; 设备PTZ节点有MoveAndTrack时应该支持这个命令。这个操作的目的是向设备发送一个自动命令：移动摄像机到想要的位置然后通过追踪算法代理PTZ操作。使用原子命令，延迟被最小化。移动位置是可选的且可以按照三种模式进行设置：<br />&#8226; 通过地理位置坐标<br />&#8226; 通过预置位token<br />&#8226; 通过PTZVector位置<br />&nbsp;&nbsp; &nbsp;请求位置移动的的速度参数优先于相应的PTZ配置的默认速度。如果引用空间含有速度参数，那么PTZ节点需支持速度空间。<br />&nbsp;&nbsp; &nbsp;如果在同一个设备中完成了侦察和追踪，那么ObjectID引用可以作为参数，以指定应跟踪哪个对象。<br />&nbsp;&nbsp; &nbsp;请求的绝对位置设备无法到达，则操作将失败。<br /><strong>请求（REQUEST）:</strong><br />&#8226; ProfileToken [tt:ReferenceToken]<br />对现有媒体配置文件的引用<br />&#8226; GeoLocation&nbsp; &#8211; 可选 [tt:GeoLocation]<br />可选目标坐标。<br />&#8226; PresetToken &#8211; 可选[tt:ReferenceToken]<br />对一个存在的预置位token的可选应用。<br />&#8226; TargetPosition &#8211; 可选[tt:PTZVector]<br />指定绝对目标位置的可选向量。<br />&#8226; Speed &#8211; 可选[tt:PTZSpeed]<br />可选速度矢量。<br />&#8226; ObjectID &#8211; 可选[tt:ObjectID]<br />要跟踪对象的可选Object ID。<br /><strong>响应（RESPONSE）</strong>: 空消息<br /><strong>错误（FAULTS）</strong>：<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoProfile<br />请求的配置文件token内ProfileToken不存在。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoPTZProfile<br />请求的配置文件token未引用PTZ配置。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported<br />引用了PTZ节点不支持的空间。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:InvalidPosition<br />请求的位置超出了界限。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:InvalidSpeed<br />请求的速度超出了界限。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:GeoMoveNotSupported<br />设备不支持地理移动。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:UnreachablePosition<br />请求的转换超出了界限。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:GeoLocationUnknown<br />由于地理位置未配置或不可用，该单元无法执行GeoMove。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoToken<br />请求的预置位token不存在。<br /><strong>访问权限类（ACCESS CLASS）</strong>：<br />ACTUATE<br /></p><h3>5.3.7.&nbsp;&nbsp; &nbsp;状态获取（GetStatus）<br /></h3><p>PTZ设备需支持通过GetStatus命令报告PTZ状态。PTZ状态包含以下信息：<br />&#8226; 位置Position (可选) &#8211; 引用空间指定云台单元的绝对位置。相应PTZ配置的默认绝对空间应在位置元素中引用。如果设备有StatusPosition能力，则需要显示此信息。<br />&#8226; 移动状态MoveStatus(可选) &#8211; 表示水平/俯仰/变焦设备单元当前是否正在移动、空闲或处于位置状态。如果设备有MoveStatus能力，则需要显示此信息。未知状态不应在正常错误中使用，但是在初始化或错误状况下使用。<br />&#8226; 错误Error (可选) &#8211; 表示当前PTZ错误状态。MoveStatus未知状态时，显示这个字段。<br />&#8226; 国际标准时间 UTC Time &#8211; 指定生成状态时的UTC时间。<br /><strong>请求（REQUEST）</strong>:<br />&#8226; ProfileToken [tt:ReferenceToken]<br />对现有媒体配置文件的引用<br /><strong>响应（RESPONSE）</strong>: 空消息<br />&#8226; PTZStatus[tt:PTZStatus]<br />请求媒体文件的PTZStatus。<br /><strong>错误（FAULTS）</strong>：<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoProfile<br />请求的配置文件token内ProfileToken不存在。<br />&#8226; env:Sender - ter:InvalidArgVal - ter:NoPTZProfile<br />请求的配置文件token未引用PTZ配置。<br />&#8226; env:Receiver &#8211; ter:Action - ter:NoStatus<br />请求的媒体配置文件中没有可用的PTZ状态。<br /><strong>访问权限类（ACCESS CLASS）</strong>：<br />&nbsp;&nbsp; &nbsp;READ_MEDIA</p><img src ="http://www.cppblog.com/chinapeter2008/aggbug/217721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2021-06-19 20:38 <a href="http://www.cppblog.com/chinapeter2008/archive/2021/06/19/217721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ONVIF协议云台服务规范 (二) ONVIF PTZ Service Specification</title><link>http://www.cppblog.com/chinapeter2008/archive/2021/06/17/217716.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Thu, 17 Jun 2021 08:34:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2021/06/17/217716.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/217716.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2021/06/17/217716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/217716.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/217716.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;5.&nbsp;&nbsp;服务5.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PTZ节点5.1.1.&nbsp;&nbsp;常规&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持PTZ的设备可以有多个PTZ节点。PTZ节点可以表示机械PTZ驱动器。上传的云台驱动程序或数字...&nbsp;&nbsp;<a href='http://www.cppblog.com/chinapeter2008/archive/2021/06/17/217716.html'>阅读全文</a><img src ="http://www.cppblog.com/chinapeter2008/aggbug/217716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2021-06-17 16:34 <a href="http://www.cppblog.com/chinapeter2008/archive/2021/06/17/217716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ONVIF协议云台服务规范(一) ONVIF PTZ Service Specification</title><link>http://www.cppblog.com/chinapeter2008/archive/2021/06/16/217715.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Wed, 16 Jun 2021 13:59:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2021/06/16/217715.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/217715.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2021/06/16/217715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/217715.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/217715.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.&nbsp;&nbsp;范围&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文档定义了用于配置和操作云台变焦控制器的web服务接口。此外，还定义了相关事件。Web服务的使用不在本文档的范围内。请参考ONVIF核心规范。2.&nbsp;&nbsp;引用标准ONVIF核心规范&lt;http://www...&nbsp;&nbsp;<a href='http://www.cppblog.com/chinapeter2008/archive/2021/06/16/217715.html'>阅读全文</a><img src ="http://www.cppblog.com/chinapeter2008/aggbug/217715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2021-06-16 21:59 <a href="http://www.cppblog.com/chinapeter2008/archive/2021/06/16/217715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>失眠的夜，瞎想</title><link>http://www.cppblog.com/chinapeter2008/archive/2017/08/05/215143.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Sat, 05 Aug 2017 15:26:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2017/08/05/215143.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/215143.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2017/08/05/215143.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/215143.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/215143.html</trackback:ping><description><![CDATA[             纵观历史，一代代伟人，哲学家，或是帝国；<br/>
               曾经的波斯帝国，你在哪里？<br/>
               曾经的亚历山大，又去了何方，是否也渐渐被人遗忘？<br/>
               埃及艳后，伊丽莎白，你们的名气虽大，但终归已是尘土。<br/><br/>

               横看世界，地球你在太阳系中算小的；<br/>
               太阳系你在银河系中又是怎样的地位？<br/>
               银河系啊，你在宇宙中又占哪个位置？<br/><br/>

               人啊，你在地球上可以算是一个管理者。<br/>
               你今日为房子劳碌而委屈了自己，你自己有想过吗？<br/>
               你昨日因为一件小事而闷闷生气，又何必呢？<br/><br/>

               我不知是明天太阳先升起，还是意外先来临。<br/>
               曾经你相信生活不止眼前的苟且，现在还相信还有诗和远方的田野吗？<br/><br/>

               
               你是否将自己局限在自己想象的框架中了呢？<br/><br/>
                <img src ="http://www.cppblog.com/chinapeter2008/aggbug/215143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2017-08-05 23:26 <a href="http://www.cppblog.com/chinapeter2008/archive/2017/08/05/215143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#与c++类型转换（c#调用c++动态库DLL类型问题）</title><link>http://www.cppblog.com/chinapeter2008/archive/2016/07/22/214029.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Fri, 22 Jul 2016 06:36:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2016/07/22/214029.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/214029.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2016/07/22/214029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/214029.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/214029.html</trackback:ping><description><![CDATA[<div>c#与C++类型转换，网摘2011-12-08 8:33//c++:HANDLE(void&nbsp;&nbsp; *)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:Byte(unsigned&nbsp;&nbsp; char)&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:SHORT(short)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Int16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:WORD(unsigned&nbsp;&nbsp; short)&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.UInt16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;//c++:INT(int)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Int16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:INT(int)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Int32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:UINT(unsigned&nbsp;&nbsp; int)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.UInt16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:UINT(unsigned&nbsp;&nbsp; int)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.UInt32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LONG(long)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Int32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:ULONG(unsigned&nbsp;&nbsp; long)&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.UInt32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:DWORD(unsigned&nbsp;&nbsp; long)&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.UInt32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:DECIMAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Decimal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:BOOL(long)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Boolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:CHAR(char)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LPSTR(char&nbsp;&nbsp; *)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LPWSTR(wchar_t&nbsp;&nbsp; *)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LPCSTR(const&nbsp;&nbsp; char&nbsp;&nbsp; *)&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LPCWSTR(const&nbsp;&nbsp; wchar_t&nbsp;&nbsp; *)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:PCAHR(char&nbsp;&nbsp; *)&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:BSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:FLOAT(float)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Single&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:DOUBLE(double)&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:VARIANT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:PBYTE(byte&nbsp;&nbsp; *)&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Byte[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:BSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:StringBuilder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LPCTSTR&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:StringBuilder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LPCTSTR&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LPTSTR&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:[MarshalAs(UnmanagedType.LPTStr)] string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LPTSTR 输出变量名&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:StringBuilder 输出变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:LPCWSTR&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:bool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:HMODULE&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:HINSTANCE ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:结构体&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:public struct 结构体{};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:结构体 **变量名&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:out 变量名&nbsp; <br />//C#中提前申明一个结构体实例化后的变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:结构体 &amp;变量名&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref 结构体变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ushort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:DWORD&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:uint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:DWORD&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:UCHAR&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:UCHAR&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:UCHAR*&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:UCHAR*&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:GUID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:Guid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:Handle&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:HWND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:DWORD&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:COLORREF&nbsp; ----&nbsp;&nbsp;&nbsp; c#:uint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned char&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned char *&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned char *&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:[MarshalAs(UnmanagedType.LPArray)] byte[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned char *&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:[MarshalAs(UnmanagedType.LPArray)] Intptr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned char &amp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned char 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:byte 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned short 变量名&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ushort 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned int 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:uint 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned long 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ulong 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:byte 变量名&nbsp; <br />//C++中一个字符用一个字节表示,C#中一个字符用两个字节表示&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char 数组名[数组大小]&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:MarshalAs(UnmanagedType.ByValTStr, SizeConst = 数组大小)]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />public string 数组名; ushort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div>//传入参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:StringBuilder<br />//传出参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char *变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref string 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div>//c++:char *输入变量名&nbsp; ----&nbsp;&nbsp;&nbsp; c#:string 输入变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char *输出变量名&nbsp; ----&nbsp;&nbsp;&nbsp; c#:[MarshalAs(UnmanagedType.LPStr)] StringBuilder 输出变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char **变量名&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref string 变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:const char *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char 变量名[数组大小]&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:[MarshalAs(UnmanagedType.ByValTStr,SizeConst=数组大小)] public string 变量名;&nbsp;&nbsp;&nbsp; </div><div></div><div>//c++:struct 结构体名 *变量名&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref 结构体名变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div>//c++:委托 变量名&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:委托变量名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:int &amp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:int *&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref int&nbsp;&nbsp;&nbsp;&nbsp; <br />//C#中调用前需定义int 变量名 = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:*int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:int32 PIPTR *&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:int32[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:float PIPTR *&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:float[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:double** 数组名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref double 数组名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:double*[] 数组名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref double 数组名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:ulong&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:UINT8 *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:ref byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//C#中调用前需定义byte 变量名 = new byte();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:handle&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:hwnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:void *&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:void * user_obj_param&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:IntPtr user_obj_param&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:void * 对象名称&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:([MarshalAs(UnmanagedType.AsAny)]Object 对象名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:char, INT8, SBYTE, CHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.SByte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:short, short int, INT16, SHORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Int16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:int, long, long int, INT32, LONG32, BOOL , INT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Int32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:__int64, INT64, LONGLONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Int64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned char, UINT8, UCHAR , BYTE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c++:unsigned short, UINT16, USHORT, WORD, ATOM, WCHAR , __wchar_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.UInt16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div>//c++:unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.UInt32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div>//c++:unsigned __int64, UINT64, DWORDLONG, ULONGLONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.UInt64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div>//c++:float, FLOAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Single&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div>//c++:double, long double, DOUBLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; c#:System.Double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div>//Win32 Types&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp; CLR Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//Struct需要在C#里重新定义一个Struct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//CallBack回调函数需要封装在一个委托里，delegate static extern int FunCallBack(string str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//unsigned char** ppImage替换成IntPtr ppImage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//int&amp; nWidth替换成ref int nWidth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//int*, int&amp;, 则都可用 ref int 对应&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//双针指类型参数，可以用 ref IntPtr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//函数指针使用c++: typedef double (*fun_type1)(double); 对应 c#:public delegate double&nbsp; fun_type1(double);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//char* 的操作c++: char*; 对应 c#:StringBuilder;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />//c#中使用指针:在需要使用指针的地方 加 unsafe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div>//unsigned&nbsp;&nbsp; char对应public&nbsp;&nbsp; byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div><div></div><div></div><strong></strong><img src ="http://www.cppblog.com/chinapeter2008/aggbug/214029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2016-07-22 14:36 <a href="http://www.cppblog.com/chinapeter2008/archive/2016/07/22/214029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新手入门学习OpenCV2.4.13 载入修改保存图像 (三)</title><link>http://www.cppblog.com/chinapeter2008/archive/2016/07/12/213919.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Mon, 11 Jul 2016 23:40:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2016/07/12/213919.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/213919.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2016/07/12/213919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/213919.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/213919.html</trackback:ping><description><![CDATA[<strong> 提示：</strong>学习这课之前，我们假设你已经知道如何用imread载入图像并用imshow显示在窗口中。&nbsp;如果还不知道那么先看<div><a href="http://www.cppblog.com/chinapeter2008/archive/2016/07/11/213910.html"><a id="viewpost1_TitleUrl" href="http://www.cppblog.com/chinapeter2008/archive/2016/07/11/213910.html">新手入门学习OpenCV2.4.13 载入并显示图像 (二)</a></div>目标：<br />在这个教程中你将会学到：<br />1、使用<span style="color: #0000ff;">imread</span>载入图像<br />2、使用<span style="color: #0000ff;">cvtColor</span>将图像冲<span style="color: #0000ff;">BGR</span>格式转换为<span style="color: #0000ff;">Grayscale</span>格式<br />3、使用<span style="color: #0000ff;">imwrite</span>将转换好的图像保存到硬盘上 <br /><br /><strong>源码：</strong><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cv.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">highgui.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;cv;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">**</span><span style="color: #000000; ">&nbsp;argv)<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;imageName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;argv[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Mat&nbsp;image;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;imread(imageName,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;argc&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">image.data)<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">No&nbsp;image&nbsp;data\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Mat&nbsp;gray_image;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;cvtColor(image,&nbsp;gray_image,&nbsp;CV_BGR2GRAY);<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;imwrite(</span><span style="color: #000000; ">"D:/</span><span style="color: #000000; ">images/Gray_Image.jpg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;gray_image);<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;namedWindow(imageName,&nbsp;CV_WINDOW_AUTOSIZE);<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;namedWindow(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Gray&nbsp;image</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;CV_WINDOW_AUTOSIZE);<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;imshow(imageName,&nbsp;image);<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;imshow(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Gray&nbsp;image</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;gray_image);<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;waitKey(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">}</span></div><br /><strong>说明：</strong><br />1、通过<span style="color: #0000ff;">imread</span>载入一个<span style="color: #0000ff;">BGR</span>图像。<br />2、将图像冲<span style="color: #0000ff;">BGR</span>转换成<span style="color: #0000ff;">Grayscale</span>格式：<br /><span style="color: #339966;">cvtColor( image, gray_image, CV_BGR2GRAY);</span><br />cvtColor参数：<br />a、源图像(<span style="color: #0000ff;">image)</span><br />b、目标图像(<span style="color: #0000ff;">gray_image</span>)，用于保存转换好的图像。<br />c、指定转换类型。<br /><br />3、保存图像<br /><span style="color: #339966;">imwrite("../../images/Gray_Image.jpg", gray_image);</span><br /><br />4、最后通过窗口显示图像，查看转换效果。<br /><div><span style="color: #339966;">namedWindow(imageName, CV_WINDOW_AUTOSIZE);</span><br /><span style="color: #339966;">&nbsp;namedWindow("Gray image", CV_WINDOW_AUTOSIZE);</span></div><div></div><div><span style="color: #339966;">&nbsp;imshow(imageName, image);</span><br /><span style="color: #339966;">&nbsp;imshow("Gray image", gray_image);</span><br /><br /><strong>结果：</strong></div><img width="540" height="301" alt="" src="http://www.cppblog.com/images/cppblog_com/chinapeter2008/result.jpg" border="0" /><img src ="http://www.cppblog.com/chinapeter2008/aggbug/213919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2016-07-12 07:40 <a href="http://www.cppblog.com/chinapeter2008/archive/2016/07/12/213919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新手入门学习OpenCV2.4.13 载入并显示图像 (二)</title><link>http://www.cppblog.com/chinapeter2008/archive/2016/07/11/213910.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Sun, 10 Jul 2016 23:58:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2016/07/11/213910.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/213910.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2016/07/11/213910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/213910.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/213910.html</trackback:ping><description><![CDATA[<strong>目标</strong><br /><strong>学习</strong>：1、使用<span style="color: #0000ff;">imread</span>载入图像。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、使用<span style="color: #0000ff;">namedWindow</span>创建命名OpenCV窗口。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、使用<span style="color: #0000ff;">imshow</span>在OpenCV窗口中显示图像。 <br /><br /><strong>源码</strong>：<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid #cccccc; border-image: none; width: 98%; font-size: 13px; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">opencv2</span><span style="color: #000000; ">/</span><span style="color: #000000; ">core</span><span style="color: #000000; ">/</span><span style="color: #000000; ">core.hpp</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">opencv2</span><span style="color: #000000; ">/</span><span style="color: #000000; ">highgui</span><span style="color: #000000; ">/</span><span style="color: #000000; ">highgui.hpp</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;cv;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">**</span><span style="color: #000000; ">&nbsp;argv)<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;argc)<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;Usage:&nbsp;display_image&nbsp;ImageToLoadAndDisplay</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000;">;<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Mat&nbsp;image;<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;imread(argv[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],&nbsp;CV_LOAD_IMAGE_COLOR);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Read&nbsp;the&nbsp;file</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">image.data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Check&nbsp;for&nbsp;invalid&nbsp;input</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Could&nbsp;not&nbsp;open&nbsp;or&nbsp;find&nbsp;the&nbsp;image</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;std::endl;<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;namedWindow(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Display&nbsp;window</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WINDOW_AUTOSIZE);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Create&nbsp;a&nbsp;window&nbsp;for&nbsp;display</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;imshow(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Display&nbsp;window</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;image);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Show&nbsp;our&nbsp;image&nbsp;inside&nbsp;it.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;waitKey(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;wait&nbsp;for&nbsp;a&nbsp;keystroke&nbsp;in&nbsp;the&nbsp;window</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">}</span></div><br /><strong>说明</strong>：<br />在使用OpenCV 2 的功能之前，几乎总是要包含 <br />1、<span style="color: #0000ff;">core</span> 部分，定义库的基本构建块<br />2、<span style="color: #0000ff;">highgui</span>模块，包含输入输出操作函数。<br /><br /><div><span style="color: #339966;">&nbsp;</span><span style="color: #339966;">#include&nbsp;</span><span style="color: #339966;">&lt;</span><span style="color: #339966;">opencv2</span><span style="color: #339966;">/</span><span style="color: #339966;">core</span><span style="color: #339966;">/</span><span style="color: #339966;">core.hpp</span><span style="color: #339966;">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;</span><span style="color: #339966;">#include&nbsp;</span><span style="color: #339966;">&lt;</span><span style="color: #339966;">opencv2</span><span style="color: #339966;">/</span><span style="color: #339966;">highgui</span><span style="color: #339966;">/</span><span style="color: #339966;">highgui.hpp</span><span style="color: #339966;">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080;">&nbsp;</span><span style="color: #339966;">#include&nbsp;</span><span style="color: #339966;">&lt;</span><span style="color: #339966;">iostream&gt;</span></div><strong></strong><br />还需要include&lt;iostream&gt;这样更容易在console上输出输入。为了避免数据结构和函数名称与其他库冲突，OpenCV有自己的命名空间<span style="color: #0000ff;">cv</span>。当然为了避免在每个关键字前都加cv::keyword，可以在头部导入该命名空间。<br /><span style="color: #339966;">using namespace cv;</span><br /><span style="color: #339966;">using namespace std;</span><br /><br />需要在命令行输入有效的图像名称。<br /><div><span style="color: #339966;">if</span><span style="color: #339966;">&nbsp;(</span><span style="color: #339966;">2</span>&nbsp;<span style="color: #339966;">!=</span><span style="color: #339966;">&nbsp;argc)<br /></span><span style="color: #339966;">{<br /></span><span style="color: #339966;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #339966;">&lt;&lt;</span>&nbsp;<span style="color: #339966;">"</span><span style="color: #339966;">&nbsp;Usage:&nbsp;display_image&nbsp;ImageToLoadAndDisplay</span><span style="color: #339966;">"</span>&nbsp;<span style="color: #339966;">&lt;&lt;</span><span style="color: #339966;">&nbsp;endl;<br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #339966;">return</span>&nbsp;<span style="color: #339966;">-</span><span style="color: #339966;">1</span><span style="color: #339966;">;</span></div><strong></strong><span style="color: #339966;">}</span><br />然后创建<span style="color: #0000ff;">Mat</span>对象用于存储载入的图像数据。<br /><span style="color: #339966;">Mat image;</span><br /><br />调用<span style="color: #0000ff;">imread</span>函数载入图像（图像名称为<span style="color: #0000ff;">argv[1]</span>指定的）。第二个参数指定图像格式。<br /><span style="color: #0000ff;">1、CV_LOAD_IMAGE_UNCHANGED (&lt;0) loads the image as is(including the alpha channel if present)</span><br /><span style="color: #0000ff;">2、CV_LOAD_IMAGE_GRAYSCALE (0) loads the image as an intensity one</span><br /><span style="color: #0000ff;">3、CV_LOAD_IMAGE_COLOR (&gt;0) loads the image in the BGR format</span><br /><br /><div><span style="color: #339966;">image = imread(argv[1], CV_LOAD_IMAGE_COLOR);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Read the file</span></div><span style="color: #000000;">如果第二个参数未指定，那么默认为</span><span style="color: #0000ff;">CV_LOAD_IMAGE_COLOR</span><br /><br />为了检查图像是否正常载入，我们用<span style="color: #0000ff;">namedWindow</span>函数创建一个OpenCV窗口来显示图像。需要指定窗口名称和大小。<br />第二个参数默认为：WINDOW_AUTOSIZE<br />1、<span style="color: #0000ff;">WINDOW_AUTOSIZE</span>&nbsp;&nbsp;&nbsp; 只支持QT平台。<br />2、<span style="color: #0000ff;">WINDOW_NORMAL&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QT上支持窗口调整大小。<br /><br />最后在创建的窗口中显示图像<br /><div><span style="color: #339966;">imshow(</span><span style="color: #339966;">"</span><span style="color: #339966;">Display&nbsp;window</span><span style="color: #339966;">"</span><span style="color: #339966;">,&nbsp;image);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><strong>结果</strong><br />编译执行程序。<br />./DisplayImage&nbsp;d:\apple.jpg</span></div><strong></strong><img src ="http://www.cppblog.com/chinapeter2008/aggbug/213910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2016-07-11 07:58 <a href="http://www.cppblog.com/chinapeter2008/archive/2016/07/11/213910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>来挑战一个排列组合的算法吧</title><link>http://www.cppblog.com/chinapeter2008/archive/2012/11/13/195109.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Tue, 13 Nov 2012 03:57:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2012/11/13/195109.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/195109.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2012/11/13/195109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/195109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/195109.html</trackback:ping><description><![CDATA[中国&nbsp;中华&nbsp;伟大&nbsp;民国&nbsp;民族，<br />如何生成所有组合（例：中国，中华民族，中华民国，伟大中华，伟大中华民族）&nbsp;。<br />注意：中华民国，民国中华&nbsp;算一个。<img src ="http://www.cppblog.com/chinapeter2008/aggbug/195109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2012-11-13 11:57 <a href="http://www.cppblog.com/chinapeter2008/archive/2012/11/13/195109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Winsock通过Sockaddr_in寻址</title><link>http://www.cppblog.com/chinapeter2008/archive/2012/07/12/183013.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Thu, 12 Jul 2012 08:28:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2012/07/12/183013.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/183013.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2012/07/12/183013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/183013.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/183013.html</trackback:ping><description><![CDATA[<div>&nbsp; <br />
&nbsp; In the Internet address family, this structure is used by Windows Sockets to specify a local or remote endpoint address to which to connect a socket. This is the form of the sockaddr structure specific to the Internet address family and can be cast to sockaddr. <br />
</div>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;sockaddr_in<br />
</span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">{<br />
</span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">short</span><span style="color: #000000; ">&nbsp;sin_family;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;(16位)地址家族（即指定地址格式），应为AF_INET。internetwork:&nbsp;UDP,&nbsp;TCP,&nbsp;etc.</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">short</span><span style="color: #000000; ">&nbsp;sin_port;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;(16位)端口号</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;in_addr&nbsp;sin_addr&nbsp;&nbsp;&nbsp; </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;(32位)&nbsp;IP地址</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;sin_zero[</span><span style="color: #000000; ">8</span><span style="color: #000000; ">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;(64位)&nbsp;填充，使结构体与SOCKADDR大小相同</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">8</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">9</span>&nbsp;<span style="color: #000000;">总共为：128位（即16字节）</span></div>
<br />
&nbsp;需要头文件：winsock2.h<br /><img src ="http://www.cppblog.com/chinapeter2008/aggbug/183013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2012-07-12 16:28 <a href="http://www.cppblog.com/chinapeter2008/archive/2012/07/12/183013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不使用中间变量交换两个整型值的方法（不会溢出）</title><link>http://www.cppblog.com/chinapeter2008/archive/2012/05/29/176612.html</link><dc:creator>canaan</dc:creator><author>canaan</author><pubDate>Tue, 29 May 2012 05:58:00 GMT</pubDate><guid>http://www.cppblog.com/chinapeter2008/archive/2012/05/29/176612.html</guid><wfw:comment>http://www.cppblog.com/chinapeter2008/comments/176612.html</wfw:comment><comments>http://www.cppblog.com/chinapeter2008/archive/2012/05/29/176612.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/chinapeter2008/comments/commentRss/176612.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinapeter2008/services/trackbacks/176612.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;inplace_swap(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">x,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">y)<br />
</span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">{<br />
</span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">x&nbsp;</span><span style="color: #000000; ">^</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">y;<br />
</span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">x&nbsp;</span><span style="color: #000000; ">^</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">y;<br />
</span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">x&nbsp;</span><span style="color: #000000; ">^</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">y;<br />
</span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">}</span></div><img src ="http://www.cppblog.com/chinapeter2008/aggbug/176612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinapeter2008/" target="_blank">canaan</a> 2012-05-29 13:58 <a href="http://www.cppblog.com/chinapeter2008/archive/2012/05/29/176612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>