我想知道是否有可能使下面的答案更通用,因为数组的类型是模板而不是无符号的:
我把整个事情都包含在这样的结构中:
template<typename ArrayType>
struct Array
{
template<ArrayType... args> struct ArrayHolder {
static const ArrayType data[sizeof...(args)];
};
template<ArrayType... args>
const ArrayType ArrayHolder<args...>::data[sizeof...(args)] = { args... };
template<size_t N, template<size_t> class F, ArrayType... args>
struct generate_array_impl {
typedef typename generate_array_impl<N-1, F, F<N>::value, args...>::result result;
};
template<template<size_t> class F, ArrayType... args>
struct generate_array_impl<0, F, args...> {
typedef ArrayHolder<F<0>::value, args...> result;
};
template<size_t N, template<size_t> class F>
struct generate_array {
typedef typename generate_array_impl<N-1, F>::result result;
};
};
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
c++-4.6 -std=c++0x -o …Run Code Online (Sandbox Code Playgroud) 我正在尝试做一个非常简单的事情,即使用64位密码和64位明文(均为十六进制)并使用简单的旧DES加密它.
我的脚本看起来像这样:
plaintext=`echo -n "$2" | sed 's/\(..\)/\\\x\1/g'`
key=$1
printf "$plaintext" | openssl enc -nosalt -e -des -nopad -K "$key" -iv "0000000000000000" | od --format=x1 --width=32 --address-radix=n | sed 's/ //g'
Run Code Online (Sandbox Code Playgroud)
我执行并得到以下结果:
./des_enc 5B5A57676A56676E 675A69675E5A6B5A
b617e2c84a4fba2149dd7132433031392257b99d9284b1031c351c15825aca52
Run Code Online (Sandbox Code Playgroud)
问题是从openssl返回的数据太多了,我希望只得到64位数据而不是512.我不知道如何显式请求64位版本的DES,它甚至可能吗?
注意:上面使用的值来自"H. Katzan,The Standard Data Encryption Algorithm,pp75-94,Petrocelli Books Inc.,New York,1977":
Key: 5B5A57676A56676E
Plaintext: 675A69675E5A6B5A
Ciphertext: 974AFFBF86022D1F
Run Code Online (Sandbox Code Playgroud) 我有以下代码,我试图通过测试,但似乎无法理解java世界中各种形式的编码.
import java.util.Arrays;
class Test {
static final byte[] A = { (byte)0x11, (byte)0x22, (byte)0x33, (byte)0x44, (byte)0x55, (byte)0x66, (byte)0x77, (byte)0x88, (byte)0x99, (byte)0x00, (byte)0xAA };
public static void main(String[] args) {
String s = new String(A);
byte[] b = s.getBytes();
if (Arrays.equals(A,b)) {
System.out.println("TEST PASSED!");
}
else {
System.out.println("TEST FAILED!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想我的问题是:将任意字节的字节数组转换为Java字符串的正确方法是什么,然后将相同的Java字符串转换为另一个字节数组,该数组的长度与原始字节的内容相同阵列?
我有以下一点代码,我希望给定cstdio包含第一行将打印,但第二行打印.
我究竟做错了什么?是否可以知道在编译时是否在当前翻译单元中定义了printf或strncmp或memcpy等标签?
#include <iostream>
#include <cstdio>
int main()
{
#ifdef printf
std::cout << "printf is defined.\n";
#else
std::cout << "printf NOT defined!\n";
#endif
return 0;
}
Run Code Online (Sandbox Code Playgroud)
原因是因为在将变量和标签引入范围/ TU之前运行预处理器?
总之是以下代码伪造?:
http://code.google.com/p/cmockery/source/browse/trunk/src/example/calculator.c#35
ActiveMQ CPP和Visual Studio 2003
我有一个要求让AMQ使用一些需要VS 7.1的代码,但是我很难获得它和使用VS 7.1构建的各种Apache库如apr等.有一个针对AMQ-CPP的vs2008解决方案/项目,我已将其用作模板,并尝试为VS 7.1创建一个,
但是在尝试构建时,我会收到如下错误:
"\amq\activemq-cpp-library-3.4.1\src\main\activemq\util\primitivemap.cpp(70): fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'f:\vs70builds\3077\vc\Compiler\Utc\src\P2\main.c', line 148)"
Run Code Online (Sandbox Code Playgroud)
总之,有没有人能够使用VS 7.1构建并成功运行AMQ?是否支持编译器?
我已经浏览了常见问题解答(没有找到任何表明方式或其他方式)并在他们的ML上发布了问题,但无济于事.
任何信息或链接都会很棒.