Mình bên điện tử, các bạn bên ngành IT cho mình hỏi vấn đề này với. Mình có làm 1 cái đồ án môn học. Đại khái là như thế này mình có 1 số dữ liệu trong bộ nhớ 1 con IC, mình muốn đọc nó ra và vẽ tín hiệu được tính toán ra từ nó. Nhưng khi đọc thì những giá trị nào nhỏ hơn 128 (0x80) thì hiển thị đúng, còn nếu lớn hơn thì lại hiển thị là số âm. Mình nghĩ mình viết chương trình (chương trình mình tìm trên mạng và chỉ chỉnh sửa lại cho phù hợp với cái bài tập của mình) bị sai, và hiểu bit thứ 8 là bit dấu (+/-) nên khi hiển thị sai luôn.
void SL900ASignal::on_pb_ReadMeas_clicked ( )
{
QByteArray answer;
int temp, j=0;
char buffer1[16], buffer2[16];
char *intStr, *cNumber;
itsGen2Res = itsParent->readUserMemory(itsCoolLogError, sp_readAddress->value() , answer);
j = answer.length();
//temp = answer[0];
for(int i=0; i<j; i++){
temp = answer[i];
intStr = _itoa(temp, buffer1, 10); //Ham chuyen nay co van de
cNumber = _itoa(i, buffer2, 16);
itsParent->logMessage("Read Blocks " + QString("%1").arg(sp_readAddress->value(), 1, 16, QLatin1Char('0')) + cNumber + ": " + intStr);
}
}
Đây là hàm readUserMemory() ở trên:
Gen2ReaderInterface::Gen2Result SL900AMainDialog::readUserMemory ( CoolLogError &error, unsigned int address, QByteArray &answer )
{
ComByteArray mem;
bool ok;
ComByteArray passw = ReaderInterface::stringToEpc(le_Password->text(), &ok);
Gen2Tag tag;
tag.epc = tagIdEdit->text();
itsGen2Res = itsGen2Reader->readFromTag(tag, MEMORY_BANK::MEM_USER, address, passw, 4, false, mem);
answer = mem.toQByteArray();
return itsGen2Res;
}
Mình nghĩ là hàm chuyển từ ByteArray sang Decimal mình viết ở trên sai, bác nào biết chỉ mình với.
Cảm ơn.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?