pImageData被设定的各个参数的值也是5位到10几位的数字。
不知道这些值是怎么设置出来的,pImage的内容是不是设的不对,应该怎么设?
IMAGEDATA *pImageData;
lpImage = (IMAGE *)pImage;
IMAGE* image=NULL;
{
image=new IMAGE;
memcpy(image->szID, "20", 20);
memcpy(image->szShubetsu, "12", 2);
memcpy(image->szDate, "20130823", 8);
memcpy(image->szTantou, "1234567890", 10);
image->sJoudaiFlag=1;
image->sJoudaiTouroku=2;
image->sKaiinFlag=3;
image->sJokabuFlag=4;
memcpy(image->szTorihikiCode, "34", 2);
memcpy(image->szLot, "56", 2);
memcpy(image->szKeiro, "78", 2);
image->sUketsukeNo=5;
memcpy(image->szNewID, "9527", 176);
image->sKabuZeor=6;
image->sImageCnt=7;
image->sImageCnt=8;
image->cKakuFlag = '9';
memcpy(image->Yobi, "9528", 43);
}
char* str2 = (char*)image;
pImageData = (IMAGEDATA *)((DWORD)lpImage + sizeof(IMAGE));
结构体定义如下:
typedef struct
{ char szID[20];
char szShubetsu[2];
char szDate[8];
char szTantou[10];
short sJoudaiFlag;
short sJoudaiTouroku;
short sKaiinFlag;
short sJokabuFlag;
char szTorihikiCode[2];
char szLot[2];
char szKeiro[2];
short sUketsukeNo;
char szNewID[20];
short sKabuZeor;
short sImageCnt;
long lDataLen;
char cKakuFlag;
char Yobi[43];
}IMAGE;
typedef struct
{ unsigned short sSignMode;
unsigned short sMabikiFlag;
unsigned long lImgLen;
unsigned long lSignLen;
unsigned short sLineLen;
unsigned short sLineCnt;
}IMAGEDATA;
8 个解决方案
#1
你这是结构体赋值吗?
#2
结构体的值设给另一个结构体应该叫什么?
#3
pImageData 是结构体指针,不是结构体变量。
主楼那两个朴素的结构体,赋值的时候直接用 = 就行了。
ps. 楼主这看着更像 c 程序,不如发到 c 版。
主楼那两个朴素的结构体,赋值的时候直接用 = 就行了。
ps. 楼主这看着更像 c 程序,不如发到 c 版。
#4
改成=符号会报错
error C2440: '=' : 'const char [20]' 无法变换为 'char [20]'
#5
先把程序发全了吧,东一榔头西一棒槌,指着谁给你看啊?
你贴出的所有代码中,根本没有 const 这个字,我那知道什么毛病啊。
#6
你贴出的所有代码中,根本没有 const 这个字,我那知道什么毛病啊。
不好意思,代码来了。
头文件:
typedef struct
{
char szID[20];
char szShubetsu[2];
char szDate[8];
char szTantou[10];
short sJoudaiFlag;
short sJoudaiTouroku;
short sKaiinFlag;
short sJokabuFlag;
char szTorihikiCode[2];
char szLot[2];
char szKeiro[2];
short sUketsukeNo;
char szNewID[20];
short sKabuZeor;
short sImageCnt;
long lDataLen;
char cKakuFlag;
char Yobi[43];
}IMAGE;
typedef struct
{
char szID[20];
char szTantou[5];
char szShubetsu[1];
char szDate[4];
char szReserve1[176];
unsigned short sImageCnt;
unsigned short sDataLen;
unsigned short sReserve2[23];
}IMAGE16;
typedef struct
{
unsigned short sSignMode;
unsigned short sMabikiFlag;
unsigned long lImgLen;
unsigned long lSignLen;
unsigned short sLineLen;
unsigned short sLineCnt;
}IMAGEDATA;
typedef struct
{
unsigned short sSignMode;
unsigned short sMabikiFlag;
unsigned short sImgLen;
unsigned short sSignLen;
unsigned short sLineLen;
unsigned short sLineCnt;
unsigned short sReserve3[2];
}IMAGEDATA16;
代码:
int main()
{
IMAGE16* image16=NULL;
{
image16=new IMAGE16;
memcpy(image16->szID, "1616161616aabbccddee", 20);
memcpy(image16->szTantou, "12345", 5);
memcpy(image16->szShubetsu, "1", 1);
memcpy(image16->szDate, "1234", 4);
memcpy(image16->szDate, "176", 176);
image16->sImageCnt=22;
image16->sDataLen=200;
for(int i=0;i<22;i++)
{
image16->sReserve2[i]=i*i;
}
}
char* str1 = (char*)image16;
IMAGE* image=NULL;
{
image=new IMAGE;
memset(image, 0x00, sizeof(IMAGE));
memset(image->szID, 0x00, 20);
memcpy(image->szID, "1234657890", 20);
memset(image->szShubetsu, 0x00, 2);
memcpy(image->szShubetsu, "12", 2);
memset(image->szDate, 0x00, 8);
memcpy(image->szDate, "20130823", 8);
memset(image->szTantou, 0x00, 10);
memcpy(image->szTantou, "1234567890", 10);
image->sJoudaiFlag=1;
image->sJoudaiTouroku=2;
image->sKaiinFlag=3;
image->sJokabuFlag=4;
memcpy(image->szTorihikiCode, "34", 2);
memcpy(image->szLot, "56", 2);
memcpy(image->szKeiro, "78", 2);
image->sUketsukeNo=5;
memcpy(image->szNewID, "9527", 176);
image->sKabuZeor=6;
image->sImageCnt=7;
image->sImageCnt=8;
image->cKakuFlag = '9';
memcpy(image->Yobi, "9528", 43);
}
char* str2 = (char*)image;
Conv16to32Comp(str1, str2);
return 0;
}
void _stdcall Conv16to32Comp(char* pImage16 , char* pImage)
{
IMAGEDATA *pImageData;
IMAGEDATA16 *pImageData16;
int i;
DWORD dwOffset16;
DWORD dwOffset;
IMAGE *lpImage;
IMAGE16 *lpImage16;
lpImage = (IMAGE *)pImage;
lpImage16 = (IMAGE16 *)pImage16;
lpImage->sImageCnt = lpImage16->sImageCnt;
lpImage->lDataLen = 128;
dwOffset = sizeof(IMAGE);
dwOffset16 = sizeof(IMAGE16);
for ( i = 0 ; i < lpImage16->sImageCnt ; i++ )
{
pImageData = (IMAGEDATA *)((DWORD)lpImage + dwOffset);
pImageData16 = (IMAGEDATA16 *)((DWORD)lpImage16 + dwOffset16);
pImageData->sSignMode = pImageData16->sSignMode;
pImageData->sMabikiFlag = pImageData16->sMabikiFlag;
pImageData->lImgLen = LOWORD(pImageData16->sImgLen);
pImageData->lSignLen = LOWORD(pImageData16->sSignLen);
pImageData->sLineLen = pImageData16->sLineLen;
pImageData->sLineCnt = pImageData16->sLineCnt;
lpImage->lDataLen += pImageData->lImgLen + sizeof(IMAGEDATA16);
memcpy( (void *) ( (DWORD)pImageData + sizeof(IMAGEDATA16) ),
(void *) ( (DWORD)pImageData16 + sizeof(IMAGEDATA16) ),
pImageData16->sSignLen );
dwOffset += ( sizeof(IMAGEDATA) + pImageData->lSignLen );
dwOffset16 += ( sizeof(IMAGEDATA16) + pImageData16->sSignLen );
}
}
#7
有两个问题
第一,结构体初始化的时候,请问怎么才能改成我设置的值?
szID的值="123465789012201308231234567890"
szShubetsu的值="12201308231234567890"
szDate的值="201308231234567890"
szTantou的值="1234567890"
memset(image, 0x00, sizeof(IMAGE));
memset(image->szID, 0x00, 20);
memcpy(image->szID, "1234657890", 20);
memset(image->szShubetsu, 0x00, 2);
memcpy(image->szShubetsu, "12", 2);
memset(image->szDate, 0x00, 8);
memcpy(image->szDate, "20130823", 8);
memset(image->szTantou, 0x00, 10);
memcpy(image->szTantou, "1234567890", 10);
第二
执行pImageData = (IMAGEDATA *)((DWORD)lpImage + dwOffset);,
会把IMAGE结构体指针设给IMAGEDATA结构体指针,里面的值变成一堆乱七八糟的数字。
请教一下这种情况应该怎么做?
小弟先在此谢过!
第一,结构体初始化的时候,请问怎么才能改成我设置的值?
szID的值="123465789012201308231234567890"
szShubetsu的值="12201308231234567890"
szDate的值="201308231234567890"
szTantou的值="1234567890"
memset(image, 0x00, sizeof(IMAGE));
memset(image->szID, 0x00, 20);
memcpy(image->szID, "1234657890", 20);
memset(image->szShubetsu, 0x00, 2);
memcpy(image->szShubetsu, "12", 2);
memset(image->szDate, 0x00, 8);
memcpy(image->szDate, "20130823", 8);
memset(image->szTantou, 0x00, 10);
memcpy(image->szTantou, "1234567890", 10);
第二
执行pImageData = (IMAGEDATA *)((DWORD)lpImage + dwOffset);,
会把IMAGE结构体指针设给IMAGEDATA结构体指针,里面的值变成一堆乱七八糟的数字。
请教一下这种情况应该怎么做?
小弟先在此谢过!
#8
有两个问题
第一,结构体初始化的时候,请问怎么才能改成我设置的值?
szID的值="123465789012201308231234567890"
szShubetsu的值="12201308231234567890"
szDate的值="201308231234567890"
szTantou的值="1234567890"
memset(image, 0x00, sizeof(IMAGE));
memset(image->szID, 0x00, 20);
memcpy(image->szID, "1234657890", 20);
memset(image->szShubetsu, 0x00, 2);
memcpy(image->szShubetsu, "12", 2);
memset(image->szDate, 0x00, 8);
memcpy(image->szDate, "20130823", 8);
memset(image->szTantou, 0x00, 10);
memcpy(image->szTantou, "1234567890", 10);
第二
执行pImageData = (IMAGEDATA *)((DWORD)lpImage + dwOffset);,
会把IMAGE结构体指针设给IMAGEDATA结构体指针,里面的值变成一堆乱七八糟的数字。
请教一下这种情况应该怎么做?
小弟先在此谢过!
设置字符串内容,需要用 strcpy,因为 memcpy 不一定会复制末尾的结束符。还有那些字符数组本身也要分配足够的空间才行。
至于乱七八糟的问题,我猜是因为 dwOffset 不正确。
实际上我也没看明白你到底要干什么,程序实在太乱了,感觉你在用上世纪 c 风格写 c++ 程序,实在懒的看。
#1
你这是结构体赋值吗?
#2
结构体的值设给另一个结构体应该叫什么?
#3
pImageData 是结构体指针,不是结构体变量。
主楼那两个朴素的结构体,赋值的时候直接用 = 就行了。
ps. 楼主这看着更像 c 程序,不如发到 c 版。
主楼那两个朴素的结构体,赋值的时候直接用 = 就行了。
ps. 楼主这看着更像 c 程序,不如发到 c 版。
#4
pImageData 是结构体指针,不是结构体变量。
主楼那两个朴素的结构体,赋值的时候直接用 = 就行了。
ps. 楼主这看着更像 c 程序,不如发到 c 版。
改成=符号会报错
error C2440: '=' : 'const char [20]' 无法变换为 'char [20]'
#5
pImageData 是结构体指针,不是结构体变量。
主楼那两个朴素的结构体,赋值的时候直接用 = 就行了。
ps. 楼主这看着更像 c 程序,不如发到 c 版。
改成=符号会报错
error C2440: '=' : 'const char [20]' 无法变换为 'char [20]'
先把程序发全了吧,东一榔头西一棒槌,指着谁给你看啊?
你贴出的所有代码中,根本没有 const 这个字,我那知道什么毛病啊。
#6
你贴出的所有代码中,根本没有 const 这个字,我那知道什么毛病啊。
不好意思,代码来了。
头文件:
typedef struct
{
char szID[20];
char szShubetsu[2];
char szDate[8];
char szTantou[10];
short sJoudaiFlag;
short sJoudaiTouroku;
short sKaiinFlag;
short sJokabuFlag;
char szTorihikiCode[2];
char szLot[2];
char szKeiro[2];
short sUketsukeNo;
char szNewID[20];
short sKabuZeor;
short sImageCnt;
long lDataLen;
char cKakuFlag;
char Yobi[43];
}IMAGE;
typedef struct
{
char szID[20];
char szTantou[5];
char szShubetsu[1];
char szDate[4];
char szReserve1[176];
unsigned short sImageCnt;
unsigned short sDataLen;
unsigned short sReserve2[23];
}IMAGE16;
typedef struct
{
unsigned short sSignMode;
unsigned short sMabikiFlag;
unsigned long lImgLen;
unsigned long lSignLen;
unsigned short sLineLen;
unsigned short sLineCnt;
}IMAGEDATA;
typedef struct
{
unsigned short sSignMode;
unsigned short sMabikiFlag;
unsigned short sImgLen;
unsigned short sSignLen;
unsigned short sLineLen;
unsigned short sLineCnt;
unsigned short sReserve3[2];
}IMAGEDATA16;
代码:
int main()
{
IMAGE16* image16=NULL;
{
image16=new IMAGE16;
memcpy(image16->szID, "1616161616aabbccddee", 20);
memcpy(image16->szTantou, "12345", 5);
memcpy(image16->szShubetsu, "1", 1);
memcpy(image16->szDate, "1234", 4);
memcpy(image16->szDate, "176", 176);
image16->sImageCnt=22;
image16->sDataLen=200;
for(int i=0;i<22;i++)
{
image16->sReserve2[i]=i*i;
}
}
char* str1 = (char*)image16;
IMAGE* image=NULL;
{
image=new IMAGE;
memset(image, 0x00, sizeof(IMAGE));
memset(image->szID, 0x00, 20);
memcpy(image->szID, "1234657890", 20);
memset(image->szShubetsu, 0x00, 2);
memcpy(image->szShubetsu, "12", 2);
memset(image->szDate, 0x00, 8);
memcpy(image->szDate, "20130823", 8);
memset(image->szTantou, 0x00, 10);
memcpy(image->szTantou, "1234567890", 10);
image->sJoudaiFlag=1;
image->sJoudaiTouroku=2;
image->sKaiinFlag=3;
image->sJokabuFlag=4;
memcpy(image->szTorihikiCode, "34", 2);
memcpy(image->szLot, "56", 2);
memcpy(image->szKeiro, "78", 2);
image->sUketsukeNo=5;
memcpy(image->szNewID, "9527", 176);
image->sKabuZeor=6;
image->sImageCnt=7;
image->sImageCnt=8;
image->cKakuFlag = '9';
memcpy(image->Yobi, "9528", 43);
}
char* str2 = (char*)image;
Conv16to32Comp(str1, str2);
return 0;
}
void _stdcall Conv16to32Comp(char* pImage16 , char* pImage)
{
IMAGEDATA *pImageData;
IMAGEDATA16 *pImageData16;
int i;
DWORD dwOffset16;
DWORD dwOffset;
IMAGE *lpImage;
IMAGE16 *lpImage16;
lpImage = (IMAGE *)pImage;
lpImage16 = (IMAGE16 *)pImage16;
lpImage->sImageCnt = lpImage16->sImageCnt;
lpImage->lDataLen = 128;
dwOffset = sizeof(IMAGE);
dwOffset16 = sizeof(IMAGE16);
for ( i = 0 ; i < lpImage16->sImageCnt ; i++ )
{
pImageData = (IMAGEDATA *)((DWORD)lpImage + dwOffset);
pImageData16 = (IMAGEDATA16 *)((DWORD)lpImage16 + dwOffset16);
pImageData->sSignMode = pImageData16->sSignMode;
pImageData->sMabikiFlag = pImageData16->sMabikiFlag;
pImageData->lImgLen = LOWORD(pImageData16->sImgLen);
pImageData->lSignLen = LOWORD(pImageData16->sSignLen);
pImageData->sLineLen = pImageData16->sLineLen;
pImageData->sLineCnt = pImageData16->sLineCnt;
lpImage->lDataLen += pImageData->lImgLen + sizeof(IMAGEDATA16);
memcpy( (void *) ( (DWORD)pImageData + sizeof(IMAGEDATA16) ),
(void *) ( (DWORD)pImageData16 + sizeof(IMAGEDATA16) ),
pImageData16->sSignLen );
dwOffset += ( sizeof(IMAGEDATA) + pImageData->lSignLen );
dwOffset16 += ( sizeof(IMAGEDATA16) + pImageData16->sSignLen );
}
}
#7
有两个问题
第一,结构体初始化的时候,请问怎么才能改成我设置的值?
szID的值="123465789012201308231234567890"
szShubetsu的值="12201308231234567890"
szDate的值="201308231234567890"
szTantou的值="1234567890"
memset(image, 0x00, sizeof(IMAGE));
memset(image->szID, 0x00, 20);
memcpy(image->szID, "1234657890", 20);
memset(image->szShubetsu, 0x00, 2);
memcpy(image->szShubetsu, "12", 2);
memset(image->szDate, 0x00, 8);
memcpy(image->szDate, "20130823", 8);
memset(image->szTantou, 0x00, 10);
memcpy(image->szTantou, "1234567890", 10);
第二
执行pImageData = (IMAGEDATA *)((DWORD)lpImage + dwOffset);,
会把IMAGE结构体指针设给IMAGEDATA结构体指针,里面的值变成一堆乱七八糟的数字。
请教一下这种情况应该怎么做?
小弟先在此谢过!
第一,结构体初始化的时候,请问怎么才能改成我设置的值?
szID的值="123465789012201308231234567890"
szShubetsu的值="12201308231234567890"
szDate的值="201308231234567890"
szTantou的值="1234567890"
memset(image, 0x00, sizeof(IMAGE));
memset(image->szID, 0x00, 20);
memcpy(image->szID, "1234657890", 20);
memset(image->szShubetsu, 0x00, 2);
memcpy(image->szShubetsu, "12", 2);
memset(image->szDate, 0x00, 8);
memcpy(image->szDate, "20130823", 8);
memset(image->szTantou, 0x00, 10);
memcpy(image->szTantou, "1234567890", 10);
第二
执行pImageData = (IMAGEDATA *)((DWORD)lpImage + dwOffset);,
会把IMAGE结构体指针设给IMAGEDATA结构体指针,里面的值变成一堆乱七八糟的数字。
请教一下这种情况应该怎么做?
小弟先在此谢过!
#8
有两个问题
第一,结构体初始化的时候,请问怎么才能改成我设置的值?
szID的值="123465789012201308231234567890"
szShubetsu的值="12201308231234567890"
szDate的值="201308231234567890"
szTantou的值="1234567890"
memset(image, 0x00, sizeof(IMAGE));
memset(image->szID, 0x00, 20);
memcpy(image->szID, "1234657890", 20);
memset(image->szShubetsu, 0x00, 2);
memcpy(image->szShubetsu, "12", 2);
memset(image->szDate, 0x00, 8);
memcpy(image->szDate, "20130823", 8);
memset(image->szTantou, 0x00, 10);
memcpy(image->szTantou, "1234567890", 10);
第二
执行pImageData = (IMAGEDATA *)((DWORD)lpImage + dwOffset);,
会把IMAGE结构体指针设给IMAGEDATA结构体指针,里面的值变成一堆乱七八糟的数字。
请教一下这种情况应该怎么做?
小弟先在此谢过!
设置字符串内容,需要用 strcpy,因为 memcpy 不一定会复制末尾的结束符。还有那些字符数组本身也要分配足够的空间才行。
至于乱七八糟的问题,我猜是因为 dwOffset 不正确。
实际上我也没看明白你到底要干什么,程序实在太乱了,感觉你在用上世纪 c 风格写 c++ 程序,实在懒的看。