마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ArrayList 출력문제

0 추천
입력값 1을 Arraylist로 받아 출력하는데 49라는 값이 출력이 되네요.. 코딩은 아래와 같이했습니다.

public void run() {
            byte[] buffer = new byte[1024];
            int bytes;

            while (true) {
                try {
                    bytes = mmInStream.read(buffer);

...

 private String bytes2String(byte[] b, int count) {
            ArrayList<String> array = new ArrayList<String>();
            for (int i = 0; i < count; i++) {
                String myInt = Integer.toString((int) (b[i]));
                array.add(myInt);
            }
            return TextUtils.join("-", array);
}
탄약7 (380 포인트) 님이 2016년 7월 25일 질문

2개의 답변

+1 추천
 
채택된 답변

 

Array0 메소드와

제가 추가한 ArrayTest 메소드를 비교해보세요.

답이 나올겁니다.

모나미153 (17,540 포인트) 님이 2016년 7월 25일 답변
탄약7님이 2016년 7월 26일 채택됨
String myInt = Integer.toString((int) (b[i])); 이 코드는 되는데
String myInt = new String(b[i]); 이 코드는
cannot resolve constructor 'String(byte)'라고 뜨네요..

제가 하려고 하는건 위에도 말씀드렸듯이 블루투스로 배열데이터를 받아
MainActivity에 있는 12개의 버튼에 0번째값은 1번 버튼에, 1번째값은 2번 버튼에
텍스트를 표시하고 싶은겁니다..
앗.. 그렇군요
그럼 byte[]를 받으신걸로 보아서
1 byte = 1 char인가요?
그럼 String대신 char를 쓰는것도 방법인것 같은데요..
private Character bytes2String(byte[] b, int count) {
            ArrayList<Character> array = new ArrayList<Character>();
            for (int i = 0; i < count; i++) {
                char myInt = new char(b[i]);
                array.add(myInt);
            }
            return array.get(0);
}

를 이렇게 바꾸라는 말씀이시죠? 근데 이것도 not a statement 라고 뜨네요..

일단 점심 먹고와서 다시해봐야겠어요! 점심 맛있게드세요!
1바이트가 1String과 무조건 1:1 대응이라면

    private static String ArrayTest(byte[] b, int count) {
        ArrayList<String> array = new ArrayList<String>();
        for (int i = 0; i < count; i++) {
            byte[] _b = new byte[1];
            _b[0] = b[i];
            String myInt = new String(_b);
            array.add(myInt);
        }
        return array.toString();
    }

이 코드로 가능합니다.
하지만, string같은 겨우 불가능하니
1, 2, 3, 4, 5 a, b.. 이런 문자가 아니라면 다른 방법을 찾아보셔야 할것 같네요.
//0번째 데이터 받기
private String Array0(byte[] b, int count) {
            ArrayList<String> array0 = new ArrayList<String>();
            for (int i = 0; i < 1; i++) {
                String myInt = new String(b);
                /*int mmyInt = Integer.parseInt(myInt);*/
                array0.add(myInt);

            }
            return  (new Character(array0.get(0).charAt(0))).toString();
        }

이런식으로 해서 성공했습니다!! 감사합니다!!

그런데 Array를 12개 만들어서 받자니 또 신경이 쓰이네요..
이건 어쩔수없겠죠?? 지금까지 답변 정말 감사드립니다! 추천 더 드리고싶은뎁..
0 추천
http://shaeod.tistory.com/228 를 참조해보시면 '1'에 대한 아스키코드값이 49입니다.

변환 과정에서 빠진거나 잘못된 부분이 있는게 아닐까요?
모나미153 (17,540 포인트) 님이 2016년 7월 25일 답변
ArrayList<String>이 문제 같아서

private String Array0(byte[] b, int count) {
            ArrayList<Integer> array = new ArrayList<Integer>();
            for (int i = 0; i < 1; i++) {
                String myInt = Integer.toString((int) (b[i]));
                int mmyInt = Integer.parseInt(myInt);
                array.add(mmyInt);
            }
            return TextUtils.join("-", array);
}

이렇게 바꿨는데도 49로 뜨네요..

현재 오픈소스 수정해서 사용하는거라 궁금한게 있는데

String myInt = Integer.toString((int) (b[i])); 이 부분이

문자열로 변경하는게 맞는거죠? myInt라고 해논게 햇갈려서..

그리고 맞다면 toString((int) (b[i])가 무엇을 뜻하는거죠?
보통 toString(매개변수)를 넣는데..

아는게없어서 이것저것 물어보는게 많네요.. 도움 부탁드립니다 감사합니다!
b[i]에는 byte값의 '1'이 들어있겠죠?
이거를 그냥 (int)로 바꿔버리면 당연히 49가 리턴되는게 맞습니다.
...