Modbus TCP üzerinden iletişim kuran bir C programı yazıyorum. 3.14
şamandıranı 0x4048F5C3
'un onaltılık gösterimi ile modbus istemcim üzerine gönderirim. C kodum modbus paketini doğru bir şekilde alıyor ve şimdi unsigned char *buffer
'u bir float olarak yeniden yorumlamam gerekiyor, böylece 3.14
değerini alabilirim.Float olarak yeniden yorumlanırken endianness belirleyebilir miyim?
{ 0xC3, 0xF5, 0x48, 0x40 };
sonra her şey iyi çalışır: Burada tampon şöyle görünür böylece endianness'ın takas çünkü eğer ben, bu sorun nedeniyle endian ait olduğunu söyleyebilir, Şimdi benim kod
int main()
{
setup_modbus_tcp();
unsigned char buffer[4] = { 0x00, 0x00, 0x00, 0x00 };
get_modbus_data(buffer, 4);
//Buffer now holds { 0x40, 0x48, 0xF5, 0xC3 };
float value = *(float *)buffer;
//value is now -490.564453
}
olduğunu. Ama bu biraz dağınık hissediyor. Endensitimi değiştirmek zorunda mıyım?
tampon elle ele alınması gerekirfloat value = *(float *)buffer;
Ya tüm bayt takas zorunda veya basılı bir ASCII dizesi olarak şamandıra gönderin: hafıza tipi
float
bir nesneye kopyalanması gerekir. –Bayt değiştirmeden sonra bile: Temsilin aynı olduğuna emin misiniz? – Olaf
@Olaf Evet, bayt değiştirdikten sonra, kesinlikle doğru. Kayan nokta hassasiyeti nedeniyle küçük bir fark vardır, ancak bunun dışında doğru. – DJMcMayhem