没有什么奇怪的,C++并不在语言级别上支持“获得数组长度”的能力。之所以main里行,是因为此时data是数组,而数组是有长度的,而chksCheck内它已经退化成指针,不具有数组的任何信息
如果你需要对象尺寸,用C++类,而不要用原生态数组
代码如下:
var msg = EncodingDefaultGetString(thisbufToArray());
2完整性判断while (msgLength > BeginOfLineLength + EndOfLineLength)//至少要包含头(2字节)+长度(1字节)+校验(1字节)。
{
if (msgIndexOf(BeginOfLine) == 0)
{
if (msgIndexOf(EndOfLine) > 0)
{
thisRaw = new byte[msgIndexOf(EndOfLine) - BeginOfLineLength + 1];
thisbufCopyTo(BeginOfLineLength, thisRaw, 0, msgIndexOf(EndOfLine) - BeginOfLineLength);
thisbufRemoveRange(0, msgIndexOf(EndOfLine) + EndOfLineLength); if (thisbufCount > 0)
{
msg = EncodingDefaultGetString(thisbufToArray());
}
else msg = "";
thisOnGetNew(thisRaw);
}
else
{
break;
}
}
else
{
//这里是很重要的,如果数据开始不是头,则删除数据。
int index = msgIndexOf(BeginOfLine);
if (index > 0)
{
thisbufRemoveRange(0, index);
msg = msgSubstring(index,msgLength- index);
}
else
{
if(thisbufCount>0)thisbufRemoveAt(0);
msg = "";
}
}
BYTE Hex1 = (Bin1<<7)+(Bin2<<6)+(Bin3<<5)+(Bin4<<4)+(Bin5<<3)+(Bin6<<2)+(Bin7<<1)+Bin8;
用calloc函数来给数组动态分配内存:
char a=(char)calloc(fileGetLength(),sizeof(char));
使用完毕之后记得释放分配的内存:free(a); 否则会造成内存泄露
UpdateData(TRUE);
另外,我给你一个获取数据更好理解的,工作量更少的办法:
COleSafeArray dataGet;
CByteArray dat;
dataGet = m_comCtrlDlgGetCommCtrl()GetInput(); //读缓冲区
// DWORD len = dataGetGetOneDimSize(); // 这里获取长度
dataGetGetByteArray(dat);
// datGetSize()也可以获取长度
你 *** 作dat就像 *** 作unsigned char 数组一样就是了
串口收数据,有时候一次本来就收不完整,你需要有个接受缓存,收到的数据全部放到缓存中,当收集完整了,才开始干你的事情,收不完整,我经常遇到到,都是这样解决的
for(k=0;k<29;k++)
safearray_inpGetElement(&k,rxdata+k);//转换为BYTE型数组
你这句有问题,如果你没有收到29个,就要出问题
for(k=0;k<29;k++) //将数组转换为Cstring型变量
{
BYTE bt=(char)(rxdata+k); //字符型
strtempFormat("%X",bt); //将字符送入临时变量strtemp存放
m_EditRxData+=strtemp; //加入接收编辑框对应字符串
}
这个FOR也是同样的问题
以上就是关于获取c++ byte数组长度出现很奇怪的问题全部的内容,包括:获取c++ byte数组长度出现很奇怪的问题、MFC串口接收数据,如何接受正确的一串数据、MFC 如何将 BYTE类型的二进制数据转换成BYTE型的十六进制数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)