java,arduino,C#之间的一些编码转换

1.C#-> Encoding.UTF8.GetBytes( "abc中") ->[97,98,99,228,184,173]

java->byte[] bs= "abc中".getBytes("Utf-8");[97,98,99,-28,-72,-83]

因为 java里的byte是 -128 到 127 ,所以java中的字节数组为负 -28的原码表示跟228是一样的(二进制)

//-----------------------------------------------------------

2.在ardunio针对char,跟 byte做(String)转换结果是不一样的,擦考如下代码,与输出

  
  Serial.begin(9600);
  delay(100);
  Serial.println("Ready!");

  byte bdata=247;
  char cdata=(char)bdata;
  
  String sb=(String)bdata;
  String sc=(String)cdata;
  
  
  Serial.println(sb.length());
  Serial.println(sc.length());
  Serial.println(sb.charAt(0),DEC);
  Serial.println((byte)sc.charAt(0),DEC);
View Code

上面代码的输出

3
1
50, 247 -> "247", charAt(0)=“2” ,'2'的ASCII是50
247 ,char转换成String后将保留原值

另外
byte bArr[4]={0,1,1,0};

String t="";

for(int i=0;i<4;i++){

 t +=(String) bArr[i];

}

Serial.println(t.length(),DEC);

结果为2,即字节数组里的0被忽略了

 

 //-------------------------------------------------------------

3.ardunio 中 byte 是0-255, char是-128到127

char c=-18;
byte t=(byte)c;
Serial.println(t,DEC);

将输出238,类似上面的问题1.

下面的是一组等价代码:

void reply(bool isOk,String cmd,String msg){
 String rStr="";
 if(isOk){
  rStr="$FOK-" + cmd +":" +msg +"$E";
  mySerial.println("AT+CIPSEND=0," + (String)rStr.length());  
  delay(10);
  mySerial.println(rStr);
 }else{
    rStr="$FEE-" + cmd +":" +msg +"$E";
    mySerial.println("AT+CIPSEND=0," + (String)rStr.length());  
    delay(10);
    mySerial.println(rStr);
 } 
  
}


//-------------------------
    byte bs[4];
    long2byte(123456789UL,bs);
    String msg= (String)((char)bs[0]) +(String)((char)bs[1]) +(String)((char)bs[2]) +(String)((char)bs[3]) ;
    
   reply(true,"HB",msg);

//      String rpStr="$FOK-HB:1234$E";
//      mySerial.println("AT+CIPSEND=0," + (String)rpStr.length());
//      delay(10);
//      mySerial.print("$FOK-HB:");
//      mySerial.write(bs[0]);
//      mySerial.write(bs[1]);
//      mySerial.write(bs[2]);
//      mySerial.write(bs[3]);
//      mySerial.println("$E");
View Code

 

你可能感兴趣的:(java,arduino,C#之间的一些编码转换)