मैं फाइवएम के लिए एक लुआ स्क्रिप्ट को जावास्क्रिप्ट (नोडजेएस प्लेटफॉर्म) में परिवर्तित कर रहा हूं और मैं एक विचित्र मुद्दे में भाग गया हूं कि मैं अपना सिर इधर-उधर नहीं कर सकता।

मैं जिस कार्यक्षमता को परिवर्तित कर रहा हूं वह सरल है, इसमें पांच एम पहचानकर्ता (उपयोगकर्ता का स्टीमिड पांच मीटर द्वारा दर्ज किया गया है) लेता है और इसे हेक्साडेसिमल से दशमलव में परिवर्तित करता है। इसके बाद यह दशमलव मान को स्टीम वेब एपीआई में भेजता है ताकि हम प्रोफाइल नाम/अवतार इत्यादि के लिए जेसन प्रतिक्रिया को पार्स कर सकें।

कोड ही ठीक काम करता है। मुद्दा धर्मांतरण के साथ पसंद करता है। स्पष्ट कारणों से मैं एपीआई कुंजी या स्टीम आईडी पोस्ट नहीं कर सकता, इसलिए मैं इसे प्रदर्शित करने के लिए खाली कर दूंगा।

एलयूए में:

local steamid = tonumber(tempSteam,16)

हेक्स स्टीम आईडी को पुनः प्राप्त करता है और dec में परिवर्तित करता है।

जेएस में:

var steamid = parseInt(tempSteam,16);

उपरोक्त के बराबर जेएस।

अजीब बात यह है। JS में tempSteam में पास करने से ### 0 पर एक स्टीमिड अंत होता है, यह मेरी प्रोफ़ाइल से मेल नहीं खाता जो ###6 (अन्य सभी अंक समान हैं) समाप्त होता है।

संपादित करें: कट स्पष्टीकरण सामग्री, मुझे तब से पता चला है (टिप्पणियों के लिए धन्यवाद) कि जेएस 64 बिट मानों को परिवर्तित नहीं कर सकता है। तो मुझे अब एक समाधान खोजने की जरूरत है।

0
Luke 4 फरवरी 2021, 14:43
2
when I run it through w3schools "try it yourself" for parseInt() I get the same incorrect value ###0. - इस त्रुटि को कैसे पुन: उत्पन्न करें? कृपया एक उदाहरण दें (आप अपनी वास्तविक स्टीम आईडी को संशोधित कर सकते हैं) कृपया।
 – 
Egor Skriptunoff
4 फरवरी 2021, 15:04
- w3schools.com/jsref/tryit.asp?filename=tryjsref_parseint मैं यहाँ गया, और एक पंक्ति के अंदर मैंने स्ट्रिंग सामग्री को अपने tempSteam से बदल दिया, जो एक हेक्साडेसिमल स्ट्रिंग है। फिर मैंने शीर्ष पर "रन" पर क्लिक किया और एचटीएमएल परिणाम पैनल में "कोशिश करें" पर क्लिक किया। यह तब parseInt रूपांतरण को आउटपुट करता है
 – 
Luke
4 फरवरी 2021, 15:14
बग को पुन: उत्पन्न करने के लिए मुझे वहां कौन सी हेक्स स्ट्रिंग डालनी चाहिए?
 – 
Egor Skriptunoff
4 फरवरी 2021, 15:25
यदि आपकी हेक्स स्ट्रिंग 64 बिट संख्या है, तो जेएस इसे परिवर्तित करने में असमर्थ है - जेएस संख्याएं double हैं (53 पूर्णांक बिट्स तक)
 – 
Egor Skriptunoff
4 फरवरी 2021, 15:30
मुझे एक ट्यूटोरियल से उपयोग करने के लिए एक हेक्स मान मिला है और इसका परीक्षण किया है, उदाहरण के लिए कृपया मेरे संपादन देखें। हेक्स मान 110000103d27e1d है
 – 
Luke
4 फरवरी 2021, 15:30

1 उत्तर

सबसे बढ़िया उत्तर

अज्ञात जानकारी के लिए टिप्पणियों के लिए धन्यवाद, मुझे पता नहीं था कि जेएस 64 बिट संख्याओं से निपटने में सक्षम नहीं था।

मुझे एक समाधान मिल गया है इसलिए मैं इसे यहां पोस्ट कर रहा हूं अगर कोई और इस मुद्दे पर चलता है।

NodeJS 10+ में एक नया BigInt फ़ंक्शन है, जो हेक्स मानों को 64 बिट हस्ताक्षरित पूर्णांक में बदल सकता है।

// Our steamhex variable, this is normally pulled via FiveM's identifiers 
// so this const is just to demonstrate what it is. 
// The 0x is important, without it the BigInt function seems to fail with a 
// generic `cannot convert`.
const steamHex = '0x110000103d27e1d';

//If using fiveM use a replace i.e 
//steamHex = steamHex.replace('steam:','0x');

//Returns 76561198024392221
var result = BigInt(steamHex); 

//...pop result into your steam api call etc....
0
Luke 4 फरवरी 2021, 19:32