public class intTochar {
public static void main(String[] args) {
int n = 65;
char test = (char) n;
System.out.println(test);
}
}
결과값은 A가 찍힌다.
타입캐스팅을 처리하여 65의 정수 데이터를 처리하니 A가 나왔다.
65, A 아스키코드표의 데이터이다.
구글링에서 아스키코드표를 검색해보면 각 진수별 아스키코드 데이터를 확인 할 수 있다.
10진법 65의 아스키코드가 A이기 때문에 test변수의 값은 A가 나오는 것을 볼 수 있다.
여기서 우리가 원하는 숫자 데이터를 변환하려면 어떻게 하면 될까?
아스키코드값의 '0'에 해당하는 값만큼 더해주고 시작하면 된다.
아스키코드값 더하기
public class intTochar {
public static void main(String[] args) {
int n = 1;
char test = (char) (n + '0');
System.out.println(test);
}
}
아까와의 차이가 있다면 '0'을 더해주는 작업이 추가되었다.
아스키코드의 '0'의 값은 10진수 값 48이다.
실제로 48을 더해주면 어떻게 될까?
public class intTochar {
public static void main(String[] args) {
int n = 1;
char test = (char) (n + 48);
System.out.println(test);
}
}
예상한대로 동일한 값을 얻을 수 있다.
char test = (char) (n + '0'); 이 부분에서 +'0'은 실제로 48을 더해준 값이기 때문이다.
Character.forDigit()
타입캐스팅방식이 아닌 메소드를 통해 형변환도 가능하다.
public class intTochar {
public static void main(String[] args) {
int REDIX = 10; // redix 10은 십진수이고 hexa는 redix 16입니다.
int a = 5 ;
char c = Character.forDigit (a, REDIX);
System.out.println(c);
}
}
10이 넘어가면?
10이 넘어가면 어떻게 될까?
public class intTochar {
public static void main(String[] args) {
int n = 10;
char test = (char) (n + '0');
System.out.println(test);
}
}
아스키코드표를 계속 언급하였으니, 눈치채신분들은 이미 알고 있었겠지만 당연히 10부터는 나오지 않는다.
'0'은 48이라고 하였다. 10 + 48의 아스키코드표의 값은 ':'이므로 당연히 저런 결과가 나온다.
애초에 10의 값을 문자열 형태로 표현하고 싶어서 char를 접근하였다면... 잘 못된 접근이므로 정수형을 문자열로 변경하는방법을 찾는것이 더 빠르고 효율적이였을겁니다.
MQTT 프로토콜은 IOT, M2M을 위한 프로토콜로 최근 IOT에서 많이 사용되는 프로토콜이라고 하여 간단하게 다뤄봤습니다.
Publisher와 Brocker, Subscriber 구조로 나뉘어있고 Publisher는 Topic을 발행하고 Subscriber는 특정 Topic을 감시 구독합니다. Brocker는 이를 중계하는 역할을 하며 한개의 Topic에 여러 Subscriber가 존재할 수 있는 구조를 가집니다.
저장을 할때 마다 오류가 발생한다는 메시지가 출력되었고, 소스를 분석하는데, 꽤 오랜시간을 소요되었습니다. XSS악성 스크립트를 막고자 인터셉터 설정을 하였고 모든 파라미터를 확인해서 특정 키워드가 존재하면 동작을 멈추게 하도록 설정해뒀는데, 해당 키워드에서 계속 걸려서 진행이 불가한 상황이였습니다.
해당 스크립트에 걸려도 괜찮고 저장할 수 있는 로직을 구성하기 위해 자바스크립트단에서 문자열데이터를 utf8 바이트 배열로 변환하고 컨트롤러단에서는 바이트 배열을 바이트로 형변환 후 new String메소드를 통해 문자열로 변환시키는 방식으로 해결하였습니다.
문자열데이터를 바이트배열로 변경하고 자바에서 바이트배열을 문자열로 변경하기
javascript단
function stringToUtf8Bytes(text){
var result = [] ;
if(text != null){
for (i = 0; i<text.length; i++) {
var c = text.charCodeAt(i);
if (c <= 0x7f) {
result.push(c);
} else if (c <= 0x07ff) {
result.push(((c >> 6) & 0x1F) | 0xC0);
result.push((c & 0x3F) | 0x80);
} else {
result.push(((c >> 12) & 0x0F) | 0xE0);
result.push(((c >> 6) & 0x3F) | 0x80);
result.push((c & 0x3F) | 0x80);
}
}
}
return result;
}