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

Đề tài: Gặp lỗi khi ép kiểu ?

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

    Mặc định Gặp lỗi khi ép kiểu ?

    Chào các bạn,

    Tôi viết 1 Winform tính mã kiểm lỗi LRC.Tôi phải ép kiểu từ decimal sang byte để nhận các số từ các NumericUpDown.

    Nhưng sau đó khi tính bù 2 , tôi vẫn phải ép kiểu byte vì nếu không sẽ nhận thông báo không thể ngầm ép kiểu từ int sang byte .

    Tôi không hiểu vì các biến của tôi đều thuộc kiểu byte chứ nhỉ ?

    Cảm ơn các bạn,
    private void Calculate(object sender, EventArgs e)
    {

    myAddress = (byte)numericUpDown1.Value;
    myCode = (byte)numericUpDown2.Value;
    myData1 = (byte)numericUpDown3.Value;
    myData2 = (byte)numericUpDown4.Value;
    myData3 = (byte)numericUpDown5.Value;
    myData4 = (byte)numericUpDown6.Value;
    myTemp = (byte)-(myAddress + myCode + myData1+myData2+myData3+myData4); // 2's complement
    numericUpDown7.Value = myTemp;

    }

    private byte myAddress;
    private byte myCode;
    private byte myData1;
    private byte myData2;
    private byte myData3;
    private byte myData4;
    private byte myTemp;

  2. #2
    Ngày gia nhập
    10 2007
    Bài viết
    27

    Nguyên cái đống "myAddress + myCode + myData1+myData2+myData3+myData4" cộng lại cũng lớn hơn khả năng chứa của byte đó bạn.

  3. #3
    Ngày gia nhập
    11 2006
    Bài viết
    633

    myTemp = (byte)-(myAddress + myCode + myData1+myData2+myData3+myData4);
    Như vầy thì sẽ ko lỗi
    Code:
    myTemp = byte(-(myAddress + myCode + myData1+myData2+myData3+myData4));
    hoặc nếu chắc ăn thì như vầy:
    Code:
    myTemp = (byte)(-(myAddress + myCode + myData1+myData2+myData3+myData4));

  4. #4
    Ngày gia nhập
    10 2007
    Bài viết
    3

    Trích dẫn Nguyên bản được gửi bởi rongchaua Xem bài viết
    Nguyên cái đống "myAddress + myCode + myData1+myData2+myData3+myData4" cộng lại cũng lớn hơn khả năng chứa của byte đó bạn.
    Oài, cảm ơn bạn

    Tôi ngờ-u thật :( , như vậy là khi cộng các biến kiểu byte thì tổng có kiểu mặc định là int .

    Tôi đã thử với các tổng kiểu short và ushort thì đều có kiểu mặc định là int.

    Nhưng khi tôi cộng các biến kiểu int thì tổng mặc định vẫn kiểu int,lạ nhỉ ? Tôi nghĩ nó phải lên long chứ ?

    Trích dẫn Nguyên bản được gửi bởi huynguyen Xem bài viết
    myTemp = (byte)(-(myAddress + myCode + myData1+myData2+myData3+myData4));
    Cảm ơn bạn đã nhắc tôi về quy tắc ép kiểu của C#

    Tôi cũng muốn hỏi thêm là tôi muốn việc đọc giá trị Value từ các NumericUpDown được thực hiện trong một vòng lặp thôi thì phải làm thế nào vậy ? ( không phải làm thủ công nữa ).

    Cảm ơn các bạn,

  5. #5
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Tôi cũng muốn hỏi thêm là tôi muốn việc đọc giá trị Value từ các NumericUpDown được thực hiện trong một vòng lặp thôi thì phải làm thế nào vậy ?
    Ko hiểu ý bạn

  6. #6
    Ngày gia nhập
    10 2007
    Bài viết
    3

    Mặc định Gặp lỗi khi ép kiểu ?

    Ah , Do tôi viết không rõ ,

    Tôi đang làm thủ công thế này,

    myAddress = (byte)numericUpDown1.Value;
    myCode = (byte)numericUpDown2.Value;
    myData1 = (byte)numericUpDown3.Value;
    myData2 = (byte)numericUpDown4.Value;
    myData3 = (byte)numericUpDown5.Value;
    myData4 = (byte)numericUpDown6.Value;
    Các biến myAddress,myCode,... tôi có thể cho vào 1 Array myMessage được .Nhưng còn các đối tượng numericUpDown thì chưa biết xử lý thế nào.

    for (int i = 0; i <= 5; i++)
    {
    myMessage[i] = ???
    }

  7. #7
    Ngày gia nhập
    10 2007
    Bài viết
    3

    Chào các bạn,

    Tôi đã làm được rồi , sử dụng một mảng đối tượng NumericUpDown ,...

    private void Calculate(object sender, EventArgs e)
    {
    myNumArray = new NumericUpDown[6] { numericUpDown1,numericUpDown2,numericUpDown3,numer icUpDown4,numericUpDown5,numericUpDown6};

    myMessage = new byte[6] {0,0,0,0,0,0};

    for (int i = 0; i <= 5; i++)
    {
    myMessage[i] = (byte)(myNumArray[i].Value);

    }

    }
    private byte[] myMessage;
    private NumericUpDown[] myNumArray;

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