<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.ywrobot.net/index.php?action=history&amp;feed=atom&amp;title=WString.h</id>
		<title>WString.h - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.ywrobot.net/index.php?action=history&amp;feed=atom&amp;title=WString.h"/>
		<link rel="alternate" type="text/html" href="http://wiki.ywrobot.net/index.php?title=WString.h&amp;action=history"/>
		<updated>2026-05-14T12:26:40Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://wiki.ywrobot.net/index.php?title=WString.h&amp;diff=50&amp;oldid=prev</id>
		<title>YWrobot CYB：创建页面，内容为“&lt;pre style=&quot;color:blue&quot;&gt; /*   WString.h - String library for Wiring &amp; Arduino   ...mostly rewritten by Paul Stoffregen...   Copyright (c) 2009-10 Hernando Barragan....”</title>
		<link rel="alternate" type="text/html" href="http://wiki.ywrobot.net/index.php?title=WString.h&amp;diff=50&amp;oldid=prev"/>
				<updated>2016-04-25T01:56:18Z</updated>
		
		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;pre style=&amp;quot;color:blue&amp;quot;&amp;gt; /*   WString.h - String library for Wiring &amp;amp; Arduino   ...mostly rewritten by Paul Stoffregen...   Copyright (c) 2009-10 Hernando Barragan....”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre style=&amp;quot;color:blue&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  WString.h - String library for Wiring &amp;amp; Arduino&lt;br /&gt;
  ...mostly rewritten by Paul Stoffregen...&lt;br /&gt;
  Copyright (c) 2009-10 Hernando Barragan.  All right reserved.&lt;br /&gt;
  Copyright 2011, Paul Stoffregen, paul@pjrc.com&lt;br /&gt;
&lt;br /&gt;
  This library is free software; you can redistribute it and/or&lt;br /&gt;
  modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
  License as published by the Free Software Foundation; either&lt;br /&gt;
  version 2.1 of the License, or (at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
  This library is distributed in the hope that it will be useful,&lt;br /&gt;
  but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
  Lesser General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
  You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
  License along with this library; if not, write to the Free Software&lt;br /&gt;
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#ifndef String_class_h&lt;br /&gt;
#define String_class_h&lt;br /&gt;
#ifdef __cplusplus&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;ctype.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// When compiling programs with this class, the following gcc parameters&lt;br /&gt;
// dramatically increase performance and memory (RAM) efficiency, typically&lt;br /&gt;
// with little or no increase in code size.&lt;br /&gt;
//     -felide-constructors&lt;br /&gt;
//     -std=c++0x&lt;br /&gt;
&lt;br /&gt;
class __FlashStringHelper;&lt;br /&gt;
#define F(string_literal) (reinterpret_cast&amp;lt;const __FlashStringHelper *&amp;gt;(PSTR(string_literal)))&lt;br /&gt;
&lt;br /&gt;
// An inherited class for holding the result of a concatenation.  These&lt;br /&gt;
// result objects are assumed to be writable by subsequent concatenations.&lt;br /&gt;
class StringSumHelper;&lt;br /&gt;
&lt;br /&gt;
// The string class&lt;br /&gt;
class String&lt;br /&gt;
{&lt;br /&gt;
	// use a function pointer to allow for &amp;quot;if (s)&amp;quot; without the&lt;br /&gt;
	// complications of an operator bool(). for more information, see:&lt;br /&gt;
	// http://www.artima.com/cppsource/safebool.html&lt;br /&gt;
	typedef void (String::*StringIfHelperType)() const;&lt;br /&gt;
	void StringIfHelper() const {}&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
	// constructors&lt;br /&gt;
	// creates a copy of the initial value.&lt;br /&gt;
	// if the initial value is null or invalid, or if memory allocation&lt;br /&gt;
	// fails, the string will be marked as invalid (i.e. &amp;quot;if (s)&amp;quot; will&lt;br /&gt;
	// be false).&lt;br /&gt;
	String(const char *cstr = &amp;quot;&amp;quot;);&lt;br /&gt;
	String(const String &amp;amp;str);&lt;br /&gt;
	#ifdef __GXX_EXPERIMENTAL_CXX0X__&lt;br /&gt;
	String(String &amp;amp;&amp;amp;rval);&lt;br /&gt;
	String(StringSumHelper &amp;amp;&amp;amp;rval);&lt;br /&gt;
	#endif&lt;br /&gt;
	explicit String(char c);&lt;br /&gt;
	explicit String(unsigned char, unsigned char base=10);&lt;br /&gt;
	explicit String(int, unsigned char base=10);&lt;br /&gt;
	explicit String(unsigned int, unsigned char base=10);&lt;br /&gt;
	explicit String(long, unsigned char base=10);&lt;br /&gt;
	explicit String(unsigned long, unsigned char base=10);&lt;br /&gt;
	~String(void);&lt;br /&gt;
&lt;br /&gt;
	// memory management&lt;br /&gt;
	// return true on success, false on failure (in which case, the string&lt;br /&gt;
	// is left unchanged).  reserve(0), if successful, will validate an&lt;br /&gt;
	// invalid string (i.e., &amp;quot;if (s)&amp;quot; will be true afterwards)&lt;br /&gt;
	unsigned char reserve(unsigned int size);&lt;br /&gt;
	inline unsigned int length(void) const {return len;}&lt;br /&gt;
&lt;br /&gt;
	// creates a copy of the assigned value.  if the value is null or&lt;br /&gt;
	// invalid, or if the memory allocation fails, the string will be &lt;br /&gt;
	// marked as invalid (&amp;quot;if (s)&amp;quot; will be false).&lt;br /&gt;
	String &amp;amp; operator = (const String &amp;amp;rhs);&lt;br /&gt;
	String &amp;amp; operator = (const char *cstr);&lt;br /&gt;
	#ifdef __GXX_EXPERIMENTAL_CXX0X__&lt;br /&gt;
	String &amp;amp; operator = (String &amp;amp;&amp;amp;rval);&lt;br /&gt;
	String &amp;amp; operator = (StringSumHelper &amp;amp;&amp;amp;rval);&lt;br /&gt;
	#endif&lt;br /&gt;
&lt;br /&gt;
	// concatenate (works w/ built-in types)&lt;br /&gt;
	&lt;br /&gt;
	// returns true on success, false on failure (in which case, the string&lt;br /&gt;
	// is left unchanged).  if the argument is null or invalid, the &lt;br /&gt;
	// concatenation is considered unsucessful.  &lt;br /&gt;
	unsigned char concat(const String &amp;amp;str);&lt;br /&gt;
	unsigned char concat(const char *cstr);&lt;br /&gt;
	unsigned char concat(char c);&lt;br /&gt;
	unsigned char concat(unsigned char c);&lt;br /&gt;
	unsigned char concat(int num);&lt;br /&gt;
	unsigned char concat(unsigned int num);&lt;br /&gt;
	unsigned char concat(long num);&lt;br /&gt;
	unsigned char concat(unsigned long num);&lt;br /&gt;
	&lt;br /&gt;
	// if there's not enough memory for the concatenated value, the string&lt;br /&gt;
	// will be left unchanged (but this isn't signalled in any way)&lt;br /&gt;
	String &amp;amp; operator += (const String &amp;amp;rhs)	{concat(rhs); return (*this);}&lt;br /&gt;
	String &amp;amp; operator += (const char *cstr)		{concat(cstr); return (*this);}&lt;br /&gt;
	String &amp;amp; operator += (char c)			{concat(c); return (*this);}&lt;br /&gt;
	String &amp;amp; operator += (unsigned char num)		{concat(num); return (*this);}&lt;br /&gt;
	String &amp;amp; operator += (int num)			{concat(num); return (*this);}&lt;br /&gt;
	String &amp;amp; operator += (unsigned int num)		{concat(num); return (*this);}&lt;br /&gt;
	String &amp;amp; operator += (long num)			{concat(num); return (*this);}&lt;br /&gt;
	String &amp;amp; operator += (unsigned long num)	{concat(num); return (*this);}&lt;br /&gt;
&lt;br /&gt;
	friend StringSumHelper &amp;amp; operator + (const StringSumHelper &amp;amp;lhs, const String &amp;amp;rhs);&lt;br /&gt;
	friend StringSumHelper &amp;amp; operator + (const StringSumHelper &amp;amp;lhs, const char *cstr);&lt;br /&gt;
	friend StringSumHelper &amp;amp; operator + (const StringSumHelper &amp;amp;lhs, char c);&lt;br /&gt;
	friend StringSumHelper &amp;amp; operator + (const StringSumHelper &amp;amp;lhs, unsigned char num);&lt;br /&gt;
	friend StringSumHelper &amp;amp; operator + (const StringSumHelper &amp;amp;lhs, int num);&lt;br /&gt;
	friend StringSumHelper &amp;amp; operator + (const StringSumHelper &amp;amp;lhs, unsigned int num);&lt;br /&gt;
	friend StringSumHelper &amp;amp; operator + (const StringSumHelper &amp;amp;lhs, long num);&lt;br /&gt;
	friend StringSumHelper &amp;amp; operator + (const StringSumHelper &amp;amp;lhs, unsigned long num);&lt;br /&gt;
&lt;br /&gt;
	// comparison (only works w/ Strings and &amp;quot;strings&amp;quot;)&lt;br /&gt;
	operator StringIfHelperType() const { return buffer ? &amp;amp;String::StringIfHelper : 0; }&lt;br /&gt;
	int compareTo(const String &amp;amp;s) const;&lt;br /&gt;
	unsigned char equals(const String &amp;amp;s) const;&lt;br /&gt;
	unsigned char equals(const char *cstr) const;&lt;br /&gt;
	unsigned char operator == (const String &amp;amp;rhs) const {return equals(rhs);}&lt;br /&gt;
	unsigned char operator == (const char *cstr) const {return equals(cstr);}&lt;br /&gt;
	unsigned char operator != (const String &amp;amp;rhs) const {return !equals(rhs);}&lt;br /&gt;
	unsigned char operator != (const char *cstr) const {return !equals(cstr);}&lt;br /&gt;
	unsigned char operator &amp;lt;  (const String &amp;amp;rhs) const;&lt;br /&gt;
	unsigned char operator &amp;gt;  (const String &amp;amp;rhs) const;&lt;br /&gt;
	unsigned char operator &amp;lt;= (const String &amp;amp;rhs) const;&lt;br /&gt;
	unsigned char operator &amp;gt;= (const String &amp;amp;rhs) const;&lt;br /&gt;
	unsigned char equalsIgnoreCase(const String &amp;amp;s) const;&lt;br /&gt;
	unsigned char startsWith( const String &amp;amp;prefix) const;&lt;br /&gt;
	unsigned char startsWith(const String &amp;amp;prefix, unsigned int offset) const;&lt;br /&gt;
	unsigned char endsWith(const String &amp;amp;suffix) const;&lt;br /&gt;
&lt;br /&gt;
	// character acccess&lt;br /&gt;
	char charAt(unsigned int index) const;&lt;br /&gt;
	void setCharAt(unsigned int index, char c);&lt;br /&gt;
	char operator [] (unsigned int index) const;&lt;br /&gt;
	char&amp;amp; operator [] (unsigned int index);&lt;br /&gt;
	void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const;&lt;br /&gt;
	void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const&lt;br /&gt;
		{getBytes((unsigned char *)buf, bufsize, index);}&lt;br /&gt;
	const char * c_str() const { return buffer; }&lt;br /&gt;
&lt;br /&gt;
	// search&lt;br /&gt;
	int indexOf( char ch ) const;&lt;br /&gt;
	int indexOf( char ch, unsigned int fromIndex ) const;&lt;br /&gt;
	int indexOf( const String &amp;amp;str ) const;&lt;br /&gt;
	int indexOf( const String &amp;amp;str, unsigned int fromIndex ) const;&lt;br /&gt;
	int lastIndexOf( char ch ) const;&lt;br /&gt;
	int lastIndexOf( char ch, unsigned int fromIndex ) const;&lt;br /&gt;
	int lastIndexOf( const String &amp;amp;str ) const;&lt;br /&gt;
	int lastIndexOf( const String &amp;amp;str, unsigned int fromIndex ) const;&lt;br /&gt;
	String substring( unsigned int beginIndex ) const;&lt;br /&gt;
	String substring( unsigned int beginIndex, unsigned int endIndex ) const;&lt;br /&gt;
&lt;br /&gt;
	// modification&lt;br /&gt;
	void replace(char find, char replace);&lt;br /&gt;
	void replace(const String&amp;amp; find, const String&amp;amp; replace);&lt;br /&gt;
	void toLowerCase(void);&lt;br /&gt;
	void toUpperCase(void);&lt;br /&gt;
	void trim(void);&lt;br /&gt;
&lt;br /&gt;
	// parsing/conversion&lt;br /&gt;
	long toInt(void) const;&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
	char *buffer;	        // the actual char array&lt;br /&gt;
	unsigned int capacity;  // the array length minus one (for the '\0')&lt;br /&gt;
	unsigned int len;       // the String length (not counting the '\0')&lt;br /&gt;
	unsigned char flags;    // unused, for future features&lt;br /&gt;
protected:&lt;br /&gt;
	void init(void);&lt;br /&gt;
	void invalidate(void);&lt;br /&gt;
	unsigned char changeBuffer(unsigned int maxStrLen);&lt;br /&gt;
	unsigned char concat(const char *cstr, unsigned int length);&lt;br /&gt;
&lt;br /&gt;
	// copy and move&lt;br /&gt;
	String &amp;amp; copy(const char *cstr, unsigned int length);&lt;br /&gt;
	#ifdef __GXX_EXPERIMENTAL_CXX0X__&lt;br /&gt;
	void move(String &amp;amp;rhs);&lt;br /&gt;
	#endif&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class StringSumHelper : public String&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	StringSumHelper(const String &amp;amp;s) : String(s) {}&lt;br /&gt;
	StringSumHelper(const char *p) : String(p) {}&lt;br /&gt;
	StringSumHelper(char c) : String(c) {}&lt;br /&gt;
	StringSumHelper(unsigned char num) : String(num) {}&lt;br /&gt;
	StringSumHelper(int num) : String(num) {}&lt;br /&gt;
	StringSumHelper(unsigned int num) : String(num) {}&lt;br /&gt;
	StringSumHelper(long num) : String(num) {}&lt;br /&gt;
	StringSumHelper(unsigned long num) : String(num) {}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif  // __cplusplus&lt;br /&gt;
#endif  // String_class_h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>YWrobot CYB</name></author>	</entry>

	</feed>