.

iT邦幫忙

1

超過longint數字轉2進位問題

  • 分享至 

  • xImage

在讀取廢止工商憑證序號取得數字,如: 230652215040745127565278404175305086968
C# 或 SQL 使用相關函數轉換成2進位會發生算術溢位錯誤,請問有無相關作法或function 可供參考, 謝謝。

alien663 iT邦研究生 3 級 ‧ 2025-02-07 13:58:15 檢舉
這種序號通常都用字串存,無須硬要使用數字去紀錄
修正一下
畢竟轉換2進位還是需要數值。的確會發生算術溢位錯誤
只能利用一下 BigInteger
儲存最好還是轉成字串欄位。
已經有人提供程式碼了
.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
zivzhong
iT邦研究生 3 級 ‧ 2025-02-07 15:23:54
最佳解答

C# :

using System;
using System.Numerics;

class Program
{
    static void Main()
    {
        // 超大數字
        string bigNumberStr = "230652215040745127565278404175305086968";

        // 轉換為 BigInteger
        BigInteger bigNumber = BigInteger.Parse(bigNumberStr);

        // 轉換為二進位字串
        string binaryString = ConvertToBinary(bigNumber);

        // 輸出結果
        Console.WriteLine($"Decimal: {bigNumberStr}");
        Console.WriteLine($"Binary: {binaryString}");
    }

    static string ConvertToBinary(BigInteger number)
    {
        return number.ToString("X");  // 轉換為十六進位字串,要轉其他像是 2 進位的也可以但就很長
    }
}

SQL不確定,但應該大概如下:

DECLARE @bigNumber DECIMAL(38, 0) = 230652215040745127565278404175305086968;
DECLARE @binaryData VARBINARY(MAX);

-- 轉換為 VARBINARY
SET @binaryData = CONVERT(VARBINARY(MAX), @bigNumber);

-- 轉換為 2 進位字串
SELECT CONCAT('0x', CAST(@binaryData AS VARCHAR(MAX))) AS BinaryString;

我要發表回答

立即登入回答