Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Hàm ASCII to Hex

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    1

    Mặc định Hàm ASCII to Hex

    Chào mọi người, em mới tập tành lập trình cho C. E có đọc 1 đoạn code như sau
    Code:
    void ASCII2Hex(uint8_t* input, int length, char* buf_str){
    	
    	// Giá trị của input là "1681110613127120302490"
    	
        for (int i = 0; i < length; i++){
            buf_str += sprintf(buf_str, "%02X", input[i]);
        }
    		
    	sprintf(buf_str,"\n");
    	// Giá trị mong muốn nhận đc buf_str="A80B6A831B0102000300F900"
    	
    	} */
    }
    Một số input/output
    Code:
    input_1:  217 12 185 130 80 1  6  0  253 255 250 0 
    output_1: D9  0C B9  82  50 01 06 00 FD  FF  FA  00 
    
    input_2:  207 12 187 130 100 1  5  0  253 255 248 0
    output_2: CF  0C BB  82  64  01 05 00 FD  FF  F8  00
    
    input_3:  168 11 106 131 27 1  2  0  3  0  249 0
    output_3: A8  0B 6A  83  1B 01 02 00 03 00 F9  00
    E có 2 thắc mắc:
    1. Ở lệnh in ra cuối cùng, kq là "A80B6A831B0102000300F900". Tuy nhiên khi in ra nó chỉ hiện ra ký tự lạ, ko dịch đc.
    2. Có cách nào dịch ngược từ "A80B6A831B0102000300F900" qua input là "1681110613127120302490 " như e viết ở trên ko ạ?

    Link gốc của file code https://github.com/Thinxtra/Xkit-Sam...gfox/WISOL.cpp
    Những phần ko liên quan/ko cần thiết trong code gốc đã đc lược bỏ.
    E cảm ơn mọi ng trc ạ!
    Đã được chỉnh sửa lần cuối bởi damtac84 : 27-10-2018 lúc 10:39 AM.

  2. #2
    Ngày gia nhập
    07 2018
    Bài viết
    2

    bạn cho toàn bộ chương trình lên đc ko

    - - - Nội dung đã được cập nhật ngày 26-10-2018 lúc 07:13 PM - - -

    mà cái này hình như ko phải C thì phải, bạn cho nó giao tiếp với cái j ak mà có Serial vậy

  3. #3
    Ngày gia nhập
    09 2011
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi tkdlbhvn Xem bài viết
    bạn cho toàn bộ chương trình lên đc ko

    - - - Nội dung đã được cập nhật ngày 26-10-2018 lúc 07:13 PM - - -

    mà cái này hình như ko phải C thì phải, bạn cho nó giao tiếp với cái j ak mà có Serial vậy
    Cái này giao tiếp UART vs vi xử lý. T sử dụng để xuất dữ liệu ra ngoài màn hình (chỉ để kiểm tra giá trị). T đã edit lại gọn gàng hơn. Thanks!

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    531

    Trích dẫn Nguyên bản được gửi bởi damtac84 Xem bài viết
    Chào mọi người, em mới tập tành lập trình cho C. E có đọc 1 đoạn code như sau
    Code:
    void ASCII2Hex(uint8_t* input, int length, char* buf_str){
    	
    	// Giá trị của input là "1681110613127120302490"
    	
        for (int i = 0; i < length; i++){
            buf_str += sprintf(buf_str, "%02X", input[i]);
        }
    		
    	sprintf(buf_str,"\n");
    	// Giá trị mong muốn nhận đc buf_str="A80B6A831B0102000300F900"
    	
    	} */
    }
    E có 2 thắc mắc:
    1. Ở lệnh in ra cuối cùng, kq e mong chờ là "A80B6A831B0102000300F900". Tuy nhiên nó chỉ hiện ra ký tự lạ, ko dịch đc.
    2. Có cách nào dịch ngược từ "A80B6A831B0102000300F900" qua input là "1681110613127120302490 " như e viết ở trên ko ạ?

    Link gốc của file code https://github.com/Thinxtra/Xkit-Sam...gfox/WISOL.cpp
    Những phần ko liên quan/ko cần thiết trong code gốc đã đc lược bỏ.
    E cảm ơn mọi ng trc ạ!
    Hàm này làm gì? Dựa vào đâu bạn mong muốn xâu
    Code:
    1681110613127120302490
    có thể dịch thành xâu
    Code:
    A80B6A831B0102000300F900
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  5. #5
    Ngày gia nhập
    09 2011
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Hàm này làm gì? Dựa vào đâu bạn mong muốn xâu
    Code:
    1681110613127120302490
    có thể dịch thành xâu
    Code:
    A80B6A831B0102000300F900
    Thank bạn đã quan tâm.
    Đầu tiên t có đọc qua 1 câu hỏi về sprintf và "%02X" trên stack over flow https://stackoverflow.com/questions/...-using-sprintf
    Từ đó t hiểu ở output định dạng sẽ là 2 ký tự tạo thành 1 block (b xem bên trên, t đã edit lại). Từ đó t truy ngược theo bảng chuyển đổi Hex -> Decimal.
    Thực tế t cũng ko hiểu tại sao ng viết hàm lại gọi là ASCII2HEX, trong khi lại sử dụng bảng chuyển đổi Hex -> Decimal.

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    531

    Mặc định Hàm ASCII to Hex

    Hàm này chuyển một chuỗi ký tự X thành một chuỗi ký tự Y mà cứ đúng 2 ký tự liên tiếp của Y hiển thị ở dạng hex một ký tự tương ứng của X, nên đặt tên là ASCII2Hex (ASCII to hex) là hợp lý.

    Điều bạn mong muốn là không có cơ sở gì cả. Nếu bạn mong muốn thế, hãy viết hàm khác.
    Đã được chỉnh sửa lần cuối bởi Ada : 27-10-2018 lúc 01:00 PM.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  7. #7
    Ngày gia nhập
    07 2018
    Bài viết
    2

    Truyền dữ liệu qua Serial nó sẽ gữi dữ liệu dưới dạng String.
    Nếu đó là data từ máy tính gửi xuống thì bạn cần convert dữ liệu sang kiểu số (ở đây là uint8_t - byte).
    Bạn có thể cho hiển thị HEX trên Serial bằng lệnh sau Serial.print(X, Y); X là biến, Y là kiểu hiển thị {DEC, HEX, OCT, BIN, ...);
    Đã được chỉnh sửa lần cuối bởi tkdlbhvn : 27-10-2018 lúc 08:04 PM.

  8. #8
    Ngày gia nhập
    09 2011
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi tkdlbhvn Xem bài viết
    Truyền dữ liệu qua Serial nó sẽ gữi dữ liệu dưới dạng String.
    Nếu đó là data từ máy tính gửi xuống thì bạn cần convert dữ liệu sang kiểu số (ở đây là uint8_t - byte).
    Bạn có thể cho hiển thị HEX trên Serial bằng lệnh sau Serial.print(X, Y); X là biến, Y là kiểu hiển thị {DEC, HEX, OCT, BIN, ...);
    Thank bác, e làm đc rồi!

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn