كيفية تحليل سلبية طويلة في عرافة في جافا

StackOverflow https://stackoverflow.com/questions/1410168

  •  05-07-2019
  •  | 
  •  

سؤال

لدينا J2ME التطبيق الذي يحتاج إلى قراءة عرافة الأرقام.التطبيق هو بالفعل كبيرة جدا بالنسبة لبعض الهواتف لذلك نحن نحاول عدم إدراج أي ترميز أو نكتب وظيفة للقيام بذلك.

جميع الأرقام 64 بت وقعت صحيحة في عرافة ، عندما نستخدم طويلة.ParseLong(عرافة ، 16) ، فإنه يتعامل مع أرقام إيجابية بشكل صحيح لكنه يلقي استثناء على الأرقام السالبة ،

    long l = Long.parseLong("FFFFFFFFFFFFFFFF", 16);

كيف يمكننا الحصول على -1 من أن hex string باستخدام الطبقات المنصوص عليها في جافا نفسها ؟

بعض الناس قد تشير إلى أننا يجب أن نكتب عرافة كما -1 كما جافا المتوقع.آسف شكل ثابت بموجب البروتوكول و لا يمكننا تغيير ذلك.

هل كانت مفيدة؟

المحلول

المشكلة هي أن parseLong() لا يعالج المتمم - أنها تتوقع توقع أن تكون موجودة في شكل '-'.

إذا كنت النامية CDC الشخصي, يمكنك استخدام بسيط

long l = new BigInteger("FFFFFFFFFFFFFFFF", 16).longValue()

ولكن CLDC الشخصي لا يجب أن الطبقة.هناك أسهل طريقة للقيام بما تحتاج على الأرجح إلى تقسيم طويلة ، تحليل في نصفين وإعادة تجميع لهم.يعمل هذا:

long msb = Long.parseLong("FFFFFFFF", 16);
long lsb = Long.parseLong("FFFFFFFF", 16);
long result = msb<<32 | lsb;

التحديث

كما جافا 8 ، يمكنك استخدام parseUnsignedLong():

long l = Long.parseUnsignedLong("FFFFFFFFFFFFFFFF", 16);

نصائح أخرى

وتحليل ذلك في قطع.

    long l = (Long.parseLong("FFFFFFFFF",16)<<32) | Long.parseLong("FFFFFFFF",16);

وأسوأ سيناريو، هل يمكن أن تحقق لمعرفة ما إذا كانت السلسلة 16 حرفا التي تبدأ مع 8-F، وإذا كان الأمر كذلك، تغيير ذلك إلى الحرف يعادل ث / س مجموعة أهم بت (أي طرح 8 من ذلك أرقام)، تحليل النتائج، وإضافة قيمة إلى تحليل الأدنى من موقعة طويلة؟ (أساسا مجرد القيام 2 لتكمل نفسك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top