我想从表示十六进制值(大写或小写)的字符转换为字节,如
'0'->0, '1' -> 1, 'A' -> 10, 'a' -> 10, 'f' -> 15 etc...
Run Code Online (Sandbox Code Playgroud)
我会经常调用这种方法,所以性能很重要.有没有比使用预先初始化HashMap<Character,Byte>从中获取值更快的方法?
回答
看起来这是使用switch-case和Jon Skeet的直接计算解决方案之间的一个折腾 - 尽管如此,交换机案例解决方案似乎有点微不足道.Greg的阵列方法胜出.以下是各种方法的200,000,000次运行的性能结果(以ms为单位):
Character.getNumericValue:
8360
Character.digit:
8453
HashMap<Character,Byte>:
15109
Greg's Array Method:
6656
JonSkeet's Direct Method:
7344
Switch:
7281
Run Code Online (Sandbox Code Playgroud)
多谢你们!
基准方法代码
你好,JonSkeet,你是老竞争对手.;-)
public class ScratchPad {
private static final int NUMBER_OF_RUNS = 200000000;
static byte res;
static HashMap<Character, Byte> map = new HashMap<Character, Byte>() {{
put( Character.valueOf( '0' ), Byte.valueOf( (byte )0 ));
put( Character.valueOf( '1' ), Byte.valueOf( …Run Code Online (Sandbox Code Playgroud) 假设我有8b1f 0008 0231 49f6 0300 f1f3 75f4 0c72 f775 0850 7676 720c 560d 75f0 02e5 ce00 0861 1302 0000 0000,如何在不复制+粘贴到十六进制编辑器的情况下轻松获取二进制文件?
如何从以下HEX流创建.gif文件:
0d 0a 0d 0a 47 49 46 38 39 61 01 00 01 00 80 ff 00 ff ff ff 00 00 00 2c 00 00 00 00 01 00 01 00 00 02 02 44 01 00 3b
3b是GIF文件终止符
我正按照http://en.wikipedia.org/wiki/Graphics_Interchange_Format#Example_GIF_file上的指南进行操作
我想在Perl或C/C++中实现它.任何语言都可以.
提前谢谢了,
谢谢各位回复.我删除了领先的'0d 0a 0d 0a'...
这就是我所熟悉的:
#!/usr/bin/perl
use strict;
use warnings;
open(IN,"<test.txt");
open(OUT,">test.gif");
my @lines=<IN>;
foreach my $line (@lines){
$line=~s/\n//g;
my @bytes=split(/ /,$line);
foreach my $byte (@bytes){
print OUT $byte;
}
}
close(OUT);
close(IN);
Run Code Online (Sandbox Code Playgroud) 我目前正在用 C# 做一个程序。当我尝试将字符串从 sha256 传递到 base64 时,我意识到它没有正确编码。
例如,给定 sha256
cd69ef0284bba33bc0b320e6479c2da2d411a5e46af060d8639f0e0bfc24f26d
Run Code Online (Sandbox Code Playgroud)
我的代码产生
Y2Q0Q2OUVGMDI4NEJCQTMzQkMwQjMyMEU2NDc5QzJEQTJENDExQTVFNDZBRjA2MEQ4NjM5RjBFMEJGQzI0RjI2RA==
Run Code Online (Sandbox Code Playgroud)
我期待得到的是
zWnvAoS7ozvAsyDmR5wtotQRpeRq8GDYY58OC/wk8m0
Run Code Online (Sandbox Code Playgroud)
为什么编码的字符串如此不同,我错过了什么?
这是我正在使用的代码
string t1 ="cd69ef0284bba33bc0b320e6479c2da2d411a5e46af060d8639f0e0bfc24f26d";
var t2= System.Text.Encoding.GetEncoding(1252).GetBytes(t1);
string t3= System.Convert.ToBase64String(t2);
Run Code Online (Sandbox Code Playgroud)