2016-11-08 50 views
-2

我想找到一些代碼,現在很容易破解一個二進制字符串。我甚至不確定我是否正確地問這個問題,但我想要得到每個「活動位」的值。例如,如果我有一個100000001的二進制字符串,我想返回數組中的值256,1。我想解決這個問題,所以我可以使用SQL中的查找表,它有一個整數列和一個文本列。整數列將用於確定將哪些文本值寫入新表。所以,在1處的值「Text1」和在256處的「文本2」都將被寫入到新表格中,但提交以獲得這些值的數字將是257.
我知道我在散漫,但我會輸入一個值257,然後將其轉換爲100000001的二進制字符串。現在我想要一些代碼將該二進制字符串分解爲兩個值... 1和256.我有什麼意義嗎?Java二進制翻譯?

+5

不幸的是,這不是一個代碼寫入服務。你有嘗試過什麼嗎? – 4castle

+0

閱讀:http://stackoverflow.com/tour 詢問: 特定的編程問題 軟件算法 編碼技術 的軟件開發工具 不要問: 問題,你有沒有試圖找到答案(顯示你的工作!) 產品或服務的建議或比較 請求事物,民意調查,意見,討論等的列表 任何與編寫計算機程序沒有直接關係的東西 –

+0

沒關係,我只是在轉換一些舊的C代碼。我覺得Java會有一個工具。把一個整數轉換成二進制是很容易的,我認爲有一個簡單的方法可以從二進制形式讀取這些位。感謝提醒我這不是一個「代碼寫作服務」。這實際上是我在過去兩年中一直在努力和維護的計劃中最小的一部分。 – user3508197

回答

0

如果您使用Integer.highestOneBit,則不需要轉換爲二進制字符串。您可以遍歷一個比特,每次調用Integer.highestOneBit填充大小爲Integer.bitCount的數組。之後,您可以用最高位的值將其從數字中移除。

public static int[] getOneBits(int num) { 
    int[] oneBits = new int[Integer.bitCount(num)]; 
    for (int i = 0; i < oneBits.length; i++) { 
     oneBits[i] = Integer.highestOneBit(num); 
     num ^= oneBits[i]; 
    } 
    return oneBits; 
} 

Ideone Demo

這將產生一個陣列,其中所有的值是按降序排列,其中所有的元素的總和將成爲原來數目的2的冪。例如,257將產生[256, 1],並且127將產生[64, 32, 16, 8, 4, 2, 1]

+0

謝謝!這正是我想要做的。我不好意思發問我的問題。 – user3508197