FAQ
Cover
\
Build
\
Source
\
Bugs
\
Reference
\
Libraries
\
Tools
The bugs database has moved
here
.
Bug 572 : Serial com.write(String) Not working with char (-127 ...)
Last modified: 2007-06-01 16:37
P
roject:
processing
trash
Version:
unspecified
Co
m
ponent:
android
book
core
libraries
pde
reference
tools
web
Status:
RESOLVED
Resolution:
INVALID -
Pr
i
ority:
P2
Severity:
normal
Platform
All
O
S:
All
Windows
Mac OS
Linux
Other
Reporter:
gll
Assigned To:
fry
Attachment
Type
Created
Size
Actions
Description
: Opened: 2007-05-27 16:20
It seems that the conversion between String to Bytes is not accurate inside
the serial Library. When I convert the String to a Byte[], it works fine,
but using String with char as char a = (char)129 --> 0x39 is sent (?)
Could it be a problem with Java to C unsigned conversion?
It has been tested on windows XP with arduino on P5v124.
Serial Lib is dated: 04-02-2007
[code]
////////////////////////
String s;
for(byte i=0; i<50; i++)
s += (char)(i+124);
com.write(s);
(input s) --> |}~?�???????????�?��????????????�?? ¡¢£¤¥¦§¨©ª«¬
(output)---> |}~???????????????????????????????? ¡¢£¤¥¦§¨©ª«¬
////////////////////////
////////////////////////
String s;
for(byte i=0; i<50; i++)
s += (char)(i+124);
for(int i=0; i<s.length(); i++)
com.write((byte)s.charAt(i));
(input bytes) --> |}~?�???????????�?��????????????�?? ¡¢£¤¥¦§¨©ª«¬
(output)---> |}~?�???????????�?��????????????�?? ¡¢£¤¥¦§¨©ª«¬
[/code]
Additional Comment
#1 From gll 2007-05-27 16:26
(Ok, it's hard to explain on html) I'll use int to represent the char.
(char|int)
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
With com.write(String)
(126|~)(0|
)(50|2)(124||)(125|})(126|~)(127|)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(63|?)(160| )(161|¡)(162|¢)(163|£)(164|¤)(165|¥)(166|¦)(167|§)(168|¨)(169|©)(170|ª)(171|«)(172|¬)(173|)(254|þ)
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
With com.write((byte)s.charAt(i));
(~|126)(
|0)(2|50)(||124)(}|125)(~|126)(|127)(?|-128)(?|-127)(?|-126)(?|-125)(?|-124)(?|-123)(?|-122)(?|-121)(?|-120)(?|-119)(?|-118)(?|-117)(?|-116)(?|-115)(?|-114)(?|-113)(?|-112)(?|-111)(?|-110)(?|-109)(?|-108)(?|-107)(?|-106)(?|-105)(?|-104)(?|-103)(?|-102)(?|-101)(?|-100)(?|-99)(?|-98)(?|-97)( |-96)(¡|-95)(¢|-94)(£|-93)(¤|-92)(¥|-91)(¦|-90)(§|-89)(¨|-88)(©|-87)(ª|-86)(«|-85)(¬|-84)(|-83)(þ|-2)
Additional Comment
#2 From fry 2007-06-01 16:02
***
Bug 573
has been marked as a duplicate of this bug. ***
Additional Comment
#3 From fry 2007-06-01 16:37
a char is a unicode character, my guess would be unicode 129 is garbage, so
String.getBytes() is giving you garbage.
if you want to send bytes, send a byte array, not a String array. there's
more about this in the Serial class javadoc:
/**
* Write a String to the output. Note that this doesn't account
* for Unicode (two bytes per char), nor will it send UTF8
* characters.. It assumes that you mean to send a byte buffer
* (most often the case for networking and serial i/o) and
* will only use the bottom 8 bits of each char in the string.
* (Meaning that internally it uses String.getBytes)
*
* If you want to move Unicode data, you can first convert the
* String to a byte stream in the representation of your choice
* (i.e. UTF8 or two-byte Unicode data), and send it as a byte array.
*/