아, 고장 모드 분석. 정말로 중요!
글쎄, 다른 터미널 데이터를 올바르게 보여줍니다 -> 터미널과 데이터 사이에 호환성이 없습니다.
빅 엔디안, 리틀 엔디안? C로 코딩 되었기 때문에 "오래된"터미널이 거의 Endian이 아니길 기대하고 있습니다. 이제 데이터를 해석 할 수 있습니다. 여기
출력
#include <stdio.h>
union myW {
double x;
// Recieved as:[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA]
unsigned char d[8] = {0x83, 0xC0,0xCA, 0xA1, 0x55, 0x66, 0xBA, 0x40};
};
union myBad {
double x;
// Recieved as:[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA]
unsigned char d[8] = {0xC0, 0x83,0xA1, 0xCA, 0x66, 0x55, 0x40, 0xBA};
};
int main(void)
{
myW value;
value.x = 1.0; // check how reasonable number looks like
printf("Something reasonable: \n");
for(int i = 0; i < 8; i++)
{
printf("%u ", value.d[i]);
}
myW received;
printf("\nWhat shouldve been displayed:\n");
for(int i = 0; i < 8; i++)
{
printf("%u ", received.d[i]);
}
printf("\n%f\n", received.x);
myBad bad;
printf("\nBad output as:\n");
for(int i = 0; i < 8; i++)
{
printf("%u ", bad.d[i]);
}
printf("\n%0.30f\n", bad.x);
}
일부 코드이다
Something reasonable:
0 0 0 0 0 0 240 63
What shouldve been displayed::
131 192 202 161 85 102 186 64
6758.334500
Bad output as:
192 131 161 202 102 85 64 186
-0.000000000000000000000000000412
그램 컴파일 ++
I 역방향 바이트 +는 비트 + XOR 0x80으로 역방향 시도를하고, 그 결과가 '2.39'이다 .. 하지만 ... 문제가있어 결과가 '20.0'또는 '3.14159'와 같이 주목할만한 것보다 더 "둥근"것으로 나타날 가능성이 높습니다 ... –
왜 그렇게 예상합니까? 그것은 "학문적 인"문제이기 때문에? 예상 된 범위 내에 있습니다! [0.01 ~ 10,000.00 초] – Makketronix