मैं विन XP पर चल रहे एक C++ प्रोग्राम के लिए एक बाइट्सएप रूटीन लिखने की कोशिश कर रहा हूं। मैं विजुअल स्टूडियो 2008 के साथ संकलन कर रहा हूँ यह है कि मैं क्या लेकर आए हैं:बाइट्सएप को दो बार कैसे करें?
int byteswap(int v) // This is good
{
return _byteswap_ulong(v);
}
double byteswap(double v) // This doesn't work for some values
{
union { // This trick is first used in Quake2 source I believe :D
__int64 i;
double d;
} conv;
conv.d = v;
conv.i = _byteswap_uint64(conv.i);
return conv.d;
}
और परीक्षण करने के लिए एक समारोह:
-76.789999999988126 -76.790000000017230 0.000000000029104 -30.499999999987718 -30.499999999994994 0.000000000007276 41.790000000014508 41.790000000029060 -0.000000000014552 90.330000000023560 90.330000000052664 -0.000000000029104:
void testit() {
double a, b, c;
CString str;
for (a = -100; a < 100; a += 0.01) {
b = byteswap(a);
c = byteswap(b);
if (a != c) {
str.Format("%15.15f %15.15f %15.15f", a, c, a - c);
}
}
}
मिलान नहीं इन नंबरों हो रही है
यह पढ़ने के बाद है:
How do I convert between big-endian and little-endian values in C++?
Little Endian - Big Endian Problem
आप डबल पर < < और >> उपयोग कर सकते हैं नहीं, वैसे (जब तक कि मैं गलत कर रहा हूँ?)
आप स्पष्ट कर सकते हैं वास्तव में क्या भूकंप 2 में आविष्कार किया गया था? निश्चित रूप से एक ही संघ के क्षेत्र के रूप में एक डबल और int64 होने का विचार नहीं है? –
क्षमा करें .. मैंने क्वैक 2 के सी को सीखा है, इसलिए मुझे यह सबसे अच्छा दिखाना पसंद है: डी मैं इसे अब पूरे स्थान पर देखता हूं। – Darrell