这可能是非常基本的,但为了节省我一小时左右的悲伤,任何人都可以告诉我如何计算出代表Java中给定正整数所需的位数?
例如,我得到小数11,(1011).我需要得到答案,4.
我想如果我能弄清楚如何将除最高位之外的所有位设置为0,然后>>>它,我会得到我的答案.但是......我做不到.
好吧,我现在已经在java中编写了一个基本的无损jpeg joiner东西,但我想将它生成的文件与原始文件进行比较.
我只能在十六进制编辑器中进行比较,有没有人知道一个简单的方法,软件或基于java(最好是软件,因为我现在不再需要编码了!)我可以比较两个图像并产生一个"差异图" "像素不一样的地方?
谢谢.
我正在尝试编写一个程序(在java中的概率),无需先解码就可以无损地连接多个jpeg.
我以为我会开始简单,尝试使用十六进制编辑器追加相同大小的2个jpegs,使用相同的设置压缩.
首先,我提取jpeg B的图像数据并将其附加到jpeg A.通过修改标题中指定的尺寸,我得到一个新的可识别图片(y轴上附加的jpeg A + jpeg B),可以进行显示.然而,尽管来自jpeg B的图像数据清晰可辨,但它似乎丢失了大量的颜色信息并且显然是不正确的.
所以我的问题是我错过了哪些步骤?我不认为我需要更改任何其他维度特定的标题值,所以也许我需要霍夫曼解码来自两个jpeg的图像数据,然后将它们附加在一起,然后重新编码该批次?
我花了一些时间阅读jpeg规格和标题等,但说实话,我已经超出了我的深度,可以用指针或两个指针!
非常感谢您的帮助.
感谢所有的建议.是的,这绝对是可能的,我应该在我原来的问题中提到jpegtran.我基本上试图复制jpegtran功能的这个方面,但在我自己的程序中使用它.我想我应该看一下jpegtran源代码,但我对C一无所知,而且对一般的编程知之甚少,所以逆向工程源代码说起来容易做起来难!
我正在尝试将数字存储为数组中的二进制字符串,但我需要指定存储它的位数.
例如,如果我需要用两位存储0,我需要一个字符串"00".或者1010有6位所以"001010".
有人可以帮忙吗?
编辑:谢谢大家,因为我对数学/编程总体上很垃圾,所以我选择了大卫的最简单的解决方案.就像是:
binaryString.append(Integer.toBinaryString(binaryNumber));
for(int n=binaryString.length(); n<numberOfBits; n++) {
binaryString.insert(0, "0");
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,所以除非效率非常低,否则我会继续使用它.
我以为我可以自己解决这个问题,但我似乎根本没有前进.
好的,背景:
我需要根据jpg文件中FFC4,DHT(Define Huffman Table)标头提供的信息创建一个Huffman代码树.DHT标头以这种方式定义Huffman表:
1)一系列16个字节.每个字节定义有多少符号具有n位的霍夫曼码,其中n是系列中字节的位置.(这有什么意义吗?!!)例如,十六进制的原始数据是:
00 01 05 01 01 01 ... 00
这意味着:
Num of bits: 1 2 3 4 5 6 7 ... 16
Num of codes: 00 01 05 01 01 01 01 ... 00
Run Code Online (Sandbox Code Playgroud)
2)在16个字节的列表之后出现实际的符号本身.例如:
00 01 02 03 04 05 06 07 08 09 0A 0B
3)结合这两部分,我们看到它们是:
00代码,1位.
01代码有2位:所以从列表中取第一个符号:00
05代码3位:所以从列表中取下一个5个符号:01 02 03 04 05
..等等
4)最后,我们必须根据上述信息计算出实际的霍夫曼代码.如果你是一个数学天才,你可能已经发现这些代码可以通过简单地为某个位长度的每个新代码增加一个具有适当位数的二进制数来计算出来.当位长增加时,只需增加二进制数,然后将其加倍并继续.当你手工绘制出一些二元树时,对其他人来说显而易见......
5)所以这是我用来计算霍夫曼代码并将它们存储在数组中的代码:(首先我在1读取数据)并将其放在一个数组中:dhtBitnum)
int binaryCode = 0;
count = 0;
StringBuffer codeString = new StringBuffer();
//populate array with code strings …Run Code Online (Sandbox Code Playgroud)