0
는
unsigned char lbytes[] = { 0x0A, 0x01, 0x02 };
unsigned char bytes[10];
double dbl = sin((double)i) * 10;
i+=5; if (i == 360) i = 0;
memcpy(&bytes, &lbytes, 3);
cout << dbl << endl;
memcpy(&bytes[3], &dbl, sizeof(double));
C#을
switch (m[1]) {
case 0x01: {
if (m.Length > 5) {
double myval = Math.Round(BitConverter.ToDouble(m, 3), 2);
하지만 뭔가 잘못 여기에 가고, myval는 매우 작은 값 alsways하고 rount으로는 항상 0
입니다 질문은 다음과 같습니다. 실수는 어디에서 볼 수 있습니까? 유효한 값을 볼 수 있습니까? 10 바이트를 보냅니다. 무엇이 잘못 되었나요?
배열의 경계 너머에'double '을 복사하지 않습니까? –
엔디 언 차이 (big-endian vs little-endian)와 비슷하게 들립니다. 'BitConverter'는 CPU 엔디안 방식을 사용하기 때문에 청크를 뒤집을 수 있습니다. 나는 최근에 그것에 대한 답변을 게시했다 ... try : http://stackoverflow.com/questions/13044200/converting-float-values-of-big-endian-to-little-c-sharp/13044715#13044715 (you ' 더블, 분명히)에 대한 8 바이트로 확장해야합니다 –
그건 단지 10 바이트를 보내는 내 잘못이야 – Cynede