public static String longToString( long[] source )
{
byte[] bytes = new byte[ source.length * 8 ];
int b = 0;
for ( int i = 0; i < source.length; i++, b += 8 )
{
bytes = (<span class="java-primitives">byte</span>)( source & 0xFF );
bytes = (<span class="java-primitives">byte</span>)( ( source &gt;&gt; <span class="java-number">8</span> ) & 0xFF );
bytes = (<span class="java-primitives">byte</span>)( ( source &gt;&gt; <span class="java-number">16</span> ) & 0xFF );
bytes = (<span class="java-primitives">byte</span>)( ( source &gt;&gt; <span class="java-number">24</span> ) & 0xFF );
bytes = (<span class="java-primitives">byte</span>)( ( source &gt;&gt; <span class="java-number">32</span> ) & 0xFF );
bytes = (<span class="java-primitives">byte</span>)( ( source &gt;&gt; <span class="java-number">40</span> ) & 0xFF );
bytes = (<span class="java-primitives">byte</span>)( ( source &gt;&gt; <span class="java-number">48</span> ) & 0xFF );
bytes = (<span class="java-primitives">byte</span>)( ( source &gt;&gt; <span class="java-number">56</span> ) & 0xFF );
}
<span class="java-keyword">return</span> <span class="java-keyword">new</span> String( bytes );
}
<span class="java-visibilitymodifier">public</span> <span class="java-storageclasses">static</span> <span class="java-primitives">long</span>[] stringToLong( String str )
{
<span class="java-primitives">int</span> needsPadding = <span class="java-number">8</span> - ( str.length() % <span class="java-number">8</span> );
<span class="java-keyword">while</span> ( needsPadding &gt; <span class="java-number">0</span> )
{
<span class="java-comment">//System.out.println( "adding padding:" + needsPadding );</span>
needsPadding–;
str += ' ';
}
<span class="java-primitives">byte</span>[] bytes = str.getBytes();
<span class="java-primitives">int</span> lengthInLong = bytes.length / <span class="java-number">8</span>;
<span class="java-primitives">long</span>[] ret = <span class="java-keyword">new</span> <span class="java-primitives">long</span>[ lengthInLong ];
<span class="java-primitives">int</span> b = <span class="java-number">0</span>;
System.out.println( <span class="java-literal">"length:"</span>+lengthInLong+<span class="java-literal">" str:'"</span>+str+<span class="java-literal">"' bytes length:"</span>+ bytes.length+<span class="java-literal">" strlength:"</span>+str.length() );
<span class="java-keyword">for</span> ( <span class="java-primitives">int</span> i = <span class="java-number">0</span>; i &lt; lengthInLong; i++, b+= <span class="java-number">8</span> )
{
System.out.println( <span class="java-literal">"i:"</span>+i);
ret = bytes + ( bytes &lt;&lt; <span class="java-number">8</span> ) + ( bytes &lt;&lt; <span class="java-number">16</span> ) + ( bytes &lt;&lt; <span class="java-number">24</span> ) + ( bytes &lt;&lt; <span class="java-number">32</span> )
+ ( bytes &lt;&lt; <span class="java-number">40</span> ) + ( bytes &lt;&lt; <span class="java-number">48</span> ) + ( bytes &lt;&lt; <span class="java-number">56</span> );
}
<span class="java-keyword">return</span> ret;
}
</pre></div><!–ENDSCRIPT–>
Also, ive used a different way of doing things, however this doesnt work correctly when some of the longs become negative (due to encryption and the like).
<!–STARTSCRIPT–><!–source lang="java"–><div class="source"><pre>
<span class="java-comment">/**
* Converts an array of longs into a string
*
* @param source The long's to convert into a string
*
* @return The longs in string form
*/</span>
<span class="java-visibilitymodifier">public</span> <span class="java-storageclasses">static</span> String longToString( <span class="java-primitives">long</span>[] source )
{
StringBuffer ret = <span class="java-keyword">new</span> StringBuffer();
<span class="java-keyword">for</span> ( <span class="java-primitives">int</span> i = <span class="java-number">0</span>; i &lt; source.length; i++ )
{
ret.append( (<span class="java-primitives">char</span>)( source & 0xFF ) );
ret.append( (<span class="java-primitives">char</span>)( ( source &gt;&gt;&gt; <span class="java-number">8</span> ) & 0xFF ) );
ret.append( (<span class="java-primitives">char</span>)( ( source &gt;&gt;&gt; <span class="java-number">16</span> ) & 0xFF ) );
ret.append( (<span class="java-primitives">char</span>)( ( source &gt;&gt;&gt; <span class="java-number">24</span> ) & 0xFF ) );
}
<span class="java-keyword">return</span> ret.toString();
}
<span class="java-comment">/**
* Converts a string into an array of longs
*
* @param str The string to be converted
*
* @return An array of longs created from the string.
*/</span>
<span class="java-visibilitymodifier">public</span> <span class="java-storageclasses">static</span> <span class="java-primitives">long</span>[] stringToLong( String str )
{
<span class="java-primitives">int</span> needsPadding = str.length() % <span class="java-number">4</span>;
<span class="java-keyword">while</span> ( needsPadding &gt; <span class="java-number">0</span> )
{
needsPadding–;
str += ' ';
}
<span class="java-primitives">int</span> lengthInLong = str.length() / <span class="java-number">4</span>;
<span class="java-primitives">long</span>[] ret = <span class="java-keyword">new</span> <span class="java-primitives">long</span>[ lengthInLong ];
<span class="java-keyword">for</span> ( <span class="java-primitives">int</span> i = <span class="java-number">0</span>; i &lt; lengthInLong; i++ )
{
ret = str.charAt( i &lt;&lt; <span class="java-number">2</span> ) + ( str.charAt( (i &lt;&lt; <span class="java-number">2</span>) + <span class="java-number">1</span> ) &lt;&lt; <span class="java-number">8</span> ) + ( str.charAt( (i &lt;&lt; <span class="java-number">2</span>) + <span class="java-number">2</span> ) &lt;&lt; <span class="java-number">16</span> ) + ( str.charAt( (i &lt;&lt; <span class="java-number">2</span>) + <span class="java-number">3</span> ) &lt;&lt; <span class="java-number">24</span> );
}
<span class="java-keyword">return</span> ret;
}
</pre></div><!–ENDSCRIPT–>
Any help, or suggestions on how to do this would be greatly appreciated!
Thanks in advance.
[java] String to long[] and back
Hi,
I'm looking to convert a String to an array of longs and back again. The following code has been tried, but doesnt work correctly.
What exactly are you trying to do? Give an example of some input and output expected.
If you're trying to do what i'm thinking, I see no need for all that code.
If you're trying to do what i'm thinking, I see no need for all that code.
Couldn't you just loop through the characters in the string and cast its value to a long, then put it in the array of longs?
ace
ace
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement