小编Dan*_*yel的帖子

AES Python加密和Ruby加密 - 不同的行为?

这个网站我有这个代码片段:

>>> from Crypto.Cipher import AES
>>> obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
>>> message = "The answer is no"
>>> ciphertext = obj.encrypt(message)
>>> list(bytearray(ciphertext))
[214, 131, 141, 100, 33, 86, 84, 146, 170, 96, 65, 5, 224, 155, 139, 241]
Run Code Online (Sandbox Code Playgroud)

当我接受这个数组并将其转换为Ruby中的String并继续解密时,会发生错误:

>> require 'openssl'
=> true
>> obj2 = OpenSSL::Cipher::Cipher.new("AES-128-CBC")
=> #<OpenSSL::Cipher::Cipher:0x007fa388389b30>
>> obj2.decrypt
=> #<OpenSSL::Cipher::Cipher:0x007fa388389b30>
>> obj2.key = 'This is a key123'
=> "This is a key123"
>> obj2.iv = …
Run Code Online (Sandbox Code Playgroud)

ruby python encryption aes

8
推荐指数
1
解决办法
2362
查看次数

在C中排序:交换指针会导致意外结果

在程序开始时,我为一个char指针数组分配内存:

char **buffer = calloc( 20, sizeof(char *) );

然后用户最多可以输入20个单词:

buffer[i] = calloc( 40, sizeof(char) );
fgets( buffer[i], 40, stdin )`
Run Code Online (Sandbox Code Playgroud)

之后我想对这个数组进行排序.如果我使用我的交换函数,它按预期工作如下:

void swap(char *args1, char *args2) {
    char tmp[40];
    strcpy( tmp, args1 );
    strcpy( args1, args2 );
    strcpy( args2, tmp );
}

void sort( char **args, int count ) {
    ...
    swap( args[i], args[j] );
    ...
}
Run Code Online (Sandbox Code Playgroud)

仔细思考后,我注意到这是浪费CPU,因为我所要做的只是将指针重定向到相应的字符串.所以我重写了我的交换功能:

void swap(char **args1, char **args2) {
    char *tmp = *args1;
    *args1 = *args2;
    *args2 = tmp;
}

void sort( char **args, …
Run Code Online (Sandbox Code Playgroud)

c swap pointers

7
推荐指数
1
解决办法
208
查看次数

Git(Windows) - 无法在克隆上创建文件.作为超级用户

我正在使用Windows 8,64位 - 我最近安装了Git以在这台计算机上使用它.但是,无法克隆任何存储库.退出时会显示以下消息:

$ git clone ssh://me@some.address.com/some/git/repository.git
Cloning into 'repository'...
error: Unable to create c:/Users/Danyel/workspace/repository/.git/HEAD
Run Code Online (Sandbox Code Playgroud)

当我cmd以管理员身份打开并尝试相同的命令时,它会成功(cmd正常用户就像使用Git Bash一样失败):

C:\Users\Danyel\workspace>git clone ssh://me@some.address.com/some/git/repository.git
Cloning into 'repository'...
remote: Counting objects: 221, done.
remote: Compressing objects: 100% (195/195), done.
remote: Total 221 (delta 34), reused 167 (delta 15)
Receiving objects: 100% (221/221), 9.23 MiB | 1.38 MiB/s, done.
Resolving deltas: 100% (34/34), done.
Checking connectivity... done
Run Code Online (Sandbox Code Playgroud)

我正在使用这个版本的Git: Git-1.8.4-preview20130916

欢迎任何帮助或线索!我检查了权限并拥有父文件夹("repository",".git")的所有权.还有什么呢?

编辑:

GIT_TRACE选项也没有提供任何关于它的线索:

$ GIT_TRACE=2 git clone ssh://me@some.address.com/some/git/repository.git
trace: built-in: git 'clone' …
Run Code Online (Sandbox Code Playgroud)

windows git

6
推荐指数
1
解决办法
832
查看次数

Ruby parslet:解析多行

我正在寻找一种匹配多行Parslet的方法.代码如下所示:

rule(:line) { (match('$').absent? >> any).repeat >> match('$') }
rule(:lines) { line.repeat }
Run Code Online (Sandbox Code Playgroud)

但是,lines总是会以无限循环结束,因为match('$')它将无休止地重复以匹配字符串的结尾.

是否可以匹配多个可以为空的行?

irb(main)> lines.parse($stdin.read)
This
is

a
multiline

string^D
Run Code Online (Sandbox Code Playgroud)

应该匹配成功.我错过了什么吗?我也试过,(match('$').absent? >> any.maybe).repeat(1) >> match('$')但这与空行不匹配.

此致,
Danyel.

ruby lines parslet

5
推荐指数
2
解决办法
1338
查看次数

Java编译器或JVM可以交换指令顺序的独立指令吗?

我们采取以下声明:

int d0, d1;
int[] ds = {0, 0};
Run Code Online (Sandbox Code Playgroud)

现在一个线程有以下说明:

d0++;
d1++;
Run Code Online (Sandbox Code Playgroud)

而另一个线程有这个指令:

ds[1] = d1;
ds[0] = d0;
Run Code Online (Sandbox Code Playgroud)

如果我们并行运行这些线程,显然有三种组合ds可能看起来像:{0,0},{1,1}和{1,0}.

现在最大的问题是:还能有{0,1}吗?编译器/ JVM是否可以简单地交换指令,因为它认为它们是无关的?如果是,那么这种行为的"规则"到底是由编译器还是JVM决定的?

java compiler-construction jvm instructions

4
推荐指数
1
解决办法
623
查看次数

检查恐慌而不从中恢复

在延迟函数中,我想查看恢复调用是否会产生非零值(不恢复)

可能吗?

error-handling go

4
推荐指数
2
解决办法
1107
查看次数

Scala,函数的字符串表示

有没有办法可以获得函数的字符串表示?

val f = List(1, 2, 3, 4, 66, 11).foldLeft(55)_

f是一个类型的函数((Int, Int) => Int) => Int,这将是我正在寻找的表示,但我无法在任何地方找到它.

toString当然,这个方法是我的第一次尝试,但它返回的只是<function1>.scala REPL做得对,文档也是如此.一定有办法吗?

问候.

string scala function representation

2
推荐指数
1
解决办法
466
查看次数

C#Tuple/List/Generics - 有更短的方法吗?

我编写了一个解析命令行参数的程序或算法.首先,需要指定有效的参数及其属性(标志,分隔符等).

现在,我有一个辅助函数返回:: Tuple<Tuple<Argument, String>, String>元组中的第一个元素(也是一个元组)包含一个"键值对",null如果找不到对.第二个元素包含一个被标识为选项的字符串,而分隔符是" "(意味着该值将是命令行中的下一个元素)

该函数的代码如下:

private Tuple<Tuple<Argument, String>, Argument> f(string e, List<Argument> valid) {
    var p = valid.Find( x => { return e.StartsWith( x.value ); } );
    if ( p == null )
        return new Tuple<Tuple<Argument, String>, Argument>( null, null );
    if ( p.flag )
        return new Tuple<Tuple<Argument, String>, Argument>( new Tuple<Argument, String>( p, "" ), null );
    if ( p.separator.Equals(" ") && p.value.Length == e.Length )
        return new Tuple<Tuple<Argument, String>, Argument>( null, …
Run Code Online (Sandbox Code Playgroud)

c# generics boilerplate

2
推荐指数
1
解决办法
2475
查看次数

编写高效且不冗余的测试

首先,我使用Scala,但任何Java方法都可能有效.

我有一个数据库连接的应用程序,我想运行我的测试和开发我的应用程序,而无需修改数据库或数据库是否脱机.

说,我有一个连接到数据库的大型类(或模块),做你想做的所有事情,我如何从外部访问该类或其参数?

例如,如果我希望类正常运行但不是statement.executeUpdate( sql ),我想要一个println( "Did: " + sql ),在这个测试中没有第一个方法被调用.

显然,一种方法是简单地替换这些语句 - 或复制整个文件并替换它们.但这很容易出错,如果我改回来,我可能会忘记一些事情.此外,它非常多余.

如何解决这个问题?怎么做JUnit

免责声明:请不要使用"参数化课程"等解决方案.我希望我的构造函数只有很少的参数,我不想在我调用它时指定所有内容.测试类在我的应用程序中是二等公民,它们对实际的类/实际开发几乎没有影响.

java testing redundancy scala

2
推荐指数
1
解决办法
217
查看次数

libgdx:显示已加载模型的线框

我一直在拼命寻找互联网上的解决方案...但我没有比功能更进一步glDrawArrays.我不知道如何使用它,或者为什么它不起作用...我想渲染我使用ObjLoader加载的模型的多边形线(或顶点线).相反,它一直向我显示白色边框.

我正在使用libgdx 1.0.0.

这是我的代码:

public class Teapot extends ApplicationAdapter {
    ModelBatch batch;
    ModelInstance m;
    Camera cam;
    CameraInputController camController;
    Environment environment;

    @Override
    public void create () {
        batch = new ModelBatch();

        environment = new Environment();
        environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
        environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));


        cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        cam.position.set(0, 0, 5f);
        cam.lookAt(0,0,0);
        cam.position.add(0, 2, 0);
        cam.near = 1f;
        cam.far = 100f;
        cam.update();

        camController = new CameraInputController(cam);
        Gdx.input.setInputProcessor(camController);


        Model model = new ObjLoader().loadModel(Gdx.files.internal("teapot.obj"), true); …
Run Code Online (Sandbox Code Playgroud)

graphics rendering wireframe libgdx

2
推荐指数
2
解决办法
1829
查看次数

链接列表程序在构建下一个节点时崩溃

我正在尝试创建程序来构建链接列表,但它在创建第二个错误时给出了分段错误.

[root @vm c_prog] #vi link1.c

#include <stdio.h>
#include <stdlib.h>


struct node {

        int x;
        struct node *next;
        };

int main () {

        int d;
        struct node *root;
        struct node *current;



        root = malloc(sizeof(struct node));

        current = root;

        printf ("Location of root is %p \n", root);

d = 1;
while (d>0){

        printf ("Enter the value of X: ");
        scanf ("%d", &current->x);

        printf ("value of x is stored\n");
        printf ("Location of current is %p \n", current);
        printf ("Value of X in …
Run Code Online (Sandbox Code Playgroud)

c

0
推荐指数
1
解决办法
77
查看次数

为什么我的字段在函数调用后会被截断?

http://play.golang.org/p/xFBSZta2CL

我现在已经尝试了2个小时了.进入主要功能,我们立即进入24-26行:

prompter.Define(&Field{"name"})
prompter.Define(&Field{"age"})
Run Code Online (Sandbox Code Playgroud)

define函数:

fmt.Printf("fields: %+v\n", c.fields)
c.fields = append(c.fields, f)
fmt.Printf("fields: %+v\n", c.fields)
Run Code Online (Sandbox Code Playgroud)

函数调用后,c.fields数组再次为空!!! 输出:

fields: []
fields: [0x1040a120]
fields: []
fields: [0x1040a130]
Run Code Online (Sandbox Code Playgroud)

go

0
推荐指数
1
解决办法
63
查看次数

Go中的不安全指针:函数调用结束杀死数组

我正在编写一个库,我想将一个非特定类型的数组(或写入数组)返回给调用者.类型可以根据谁调用而变化 - 但是,我可以在我的函数中创建所述类型的所有对象.一种方法是调用者创建一个数组并且被调用者填充它 - 但是,没有办法知道这个数组将会有多长.(有没有办法让被叫方使调用者的数组更大?记住,被调用者只看到x interface{}......)

我选择的另一种方式,因为我看不出上面的可能性,是调用者给了我特定类型的指针,然后我将它重定向到我创建的对象数组.

以下是我的解决方案.我的问题:函数调用后为什么数组为空?它们在我的操作后指向同一个数组,它们应该是相同的.我忽略了什么吗?我想过GC,但它不会那么快,不是吗?

http://play.golang.org/p/oVoPx5Nf84

package main

import "unsafe"
import "reflect"
import "log"

func main() {
    var x []string
    log.Printf("before: %v, %p", x, x)
    manipulate(&x)
    log.Printf("after: %v, %p", x, x)
}

func manipulate(target interface{}) {
    new := make([]string, 0, 10)
    new = append(new, "Hello", "World")
    log.Printf("new: %v, %p", new, new)
    p := unsafe.Pointer(reflect.ValueOf(target).Pointer())
    ptr := unsafe.Pointer(reflect.ValueOf(new).Pointer())
    *(*unsafe.Pointer)(p) = ptr
}
Run Code Online (Sandbox Code Playgroud)

arrays pointers go

-1
推荐指数
1
解决办法
95
查看次数