zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    高性能JavaScript DOM编程
    浏览器缓存机制浅析
    高性能JavaScript 循环语句和流程控制
    高性能JavaScript 编程实践
    HTML5 postMessage 跨域交换数据
    纠结的连等赋值
    从setTimeout谈JavaScript运行机制
    闭包拾遗 & 垃圾回收机制
    闭包初窥
    Odoo中如何复制有唯一性约束的记录?
  • 原文地址:https://www.cnblogs.com/wdfrog/p/4959407.html
Copyright © 2011-2022 走看看