小编bea*_*mit的帖子

当base64 null后跟一个=时,HTML5数据URI失败?

我正在用JavaScript做一些非常糟糕的事情,我遇到了一个奇怪的问题.

我正在创建填充静态大小的缓冲区的二进制数据.如果内容未填充缓冲区,则余数将填充空字符.

下一步是转换为base64.

大小(字节)并不总是3的倍数,所以我可能需要在末尾添加填充.缓冲区中的最后一个字节始终为空(实际上,它大约是一个kb的空值).

当我在Firefox和Chrome上将其转换为base64时,我会得到ERR_INVALID_URL一个尾随'=',但是当我没有时,它会下载.

例如:

var url = "data:application/octet-stream;base64,";

window.open(url + "AAAA"); // works
window.open(url + "AAAA="); // doesn't work
window.open(url + "icw="); // works
Run Code Online (Sandbox Code Playgroud)

我的文件有效,但它们不符合规范.

这是无效base64的原因吗?更重要的是,这是一个错误还是规范的一部分?

编辑:

我发布了一个答案,给出了Firefox和Chrome之间的一些奇怪之处.有谁知道标准规定了什么?或者它是那些导致碎片的松散规格之一?如果可能的话,我想要一些确定的东西.

javascript base64 google-chrome firefox4 data-uri

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

删除C中的最后一个新行

我想从以下函数中删除最后一个新行:

void WriteToFile(node *tree)
{
    void Write(node*);
    fp = fopen("dictionary.txt","w");
    if(fp==NULL)
    {
        printf("Cannot open file for writing data...");
    }
    else //if(tree==NULL)
    {
        if(tree!=NULL)
        {
            Write(tree);
        }
        fclose(fp);  
    }
}
void Write(node *tree)
{
    if(tree!=NULL)
    {
        fprintf(fp,"%s:%s\n",tree->word,tree->meaning);
        Write(tree->left);
        Write(tree->right);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用此函数将文本文件写入BST的内容,我不希望它写入最后一个新行,我该如何删除它?

c file

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

什么时候strcmp不会返回-1,0或1?

从手册页:

所述的strcmp()和STRNCMP()函数返回小于整数,等于或大于零,如果S1(或其前n个字节)被发现,分别为小于,以匹配或大于s2 .

实施例中的代码C(打印-15我的机器上,交换TEST1和TEST2反转值):

#include <stdio.h>
#include <string.h>

int main() {
    char* test1 = "hello";
    char* test2 = "world";
    printf("%d\n", strcmp(test1, test2));
}
Run Code Online (Sandbox Code Playgroud)

我发现这个代码(取自这个问题)依赖于strcmp的值不是-1,0和1(它使用返回值qsort).对我来说,这是一种可怕的风格,取决于无证的功能.

我想我有两个相关的问题:

  • C标准中是否有某些内容定义了返回值除了小于,大于或等于零之外的值?如果没有,标准实现有什么作用?
  • 整个Linux,Windows和BSD的返回值是否一致?

编辑:

离开我的电脑5分钟后,我意识到问题代码实际上没有错误.在阅读评论/答案之前,我找出了我想出的部分,但是我把它留在那里以保持评论的相关性.我认为这仍然是一个有趣的问题,可能会导致习惯于其他语言的程序员总是返回-1,0或1(例如Python似乎这样做,但是没有记录这种方式).

FWIW,我认为依赖记录行为以外的其他东西是不好的风格.

c strcmp

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

LuaJIT vs luac用于自定义Lua字节码解释器

相关:标准Lua字节码和LuaJIT字节码之间的差异

我正在写一个Lua字节码解释器,我正在尝试在LuaJIT和luac之间做出决定来生成初始字节码.因为我正在编写一个解释器,所以我不会得到任何JIT性能,所以这一切都取决于编译器的质量和生成的字节码的设计.

是否要么编译器明显更好?

我在Dart(也是解释)中写这个,所以我们赞赏编译器的任何免费优化.

lua interpreter bytecode luajit

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

是否正在结束一个惯用的切片?

我正在阅读Go的compress/flate包,我发现了这段奇怪的代码[1]:

n := int32(len(list))
list = list[0 : n+1]
list[n] = maxNode()
Run Code Online (Sandbox Code Playgroud)

在上下文中,list保证指向具有更多数据的数组.这是一个私有函数,因此不能在库外滥用.

对我来说,这似乎是一个可怕的黑客应该是运行时异常.例如,以下D代码生成RangeError:

auto x = [1, 2, 3];
auto y = x[0 .. 2];
y = y[0 .. 3];
Run Code Online (Sandbox Code Playgroud)

使用以下内容可以更简单地(并且看起来更安全)进行滥用切片:

x := []int{1, 2, 3}
y = x[:2]
y = append(y, 4) // x is now [1, 2, 4] because of how append works
Run Code Online (Sandbox Code Playgroud)

但是这两种解决方案看起来都非常骇人和可怕,恕我直言,不应该像他们那样工作.这种事情被认为是惯用的Go代码吗?如果是这样,上面哪一个惯用?

[1] - http://golang.org/src/pkg/compress/flate/huffman_code.go#L136

idioms go slice

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

适用于 Windows 的开源 C++ 调试器

有人知道适用于 Windows 的开源 C++ 调试器吗?

它不一定是好的,它只需要工作。(我更喜欢用 C++ 编写的)

谢谢 :)

c++ windows debugging

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

while循环使用c ++中的计时器

我正在尝试创建一个while循环,当满足字符串条件或计时器条件时,程序将跳出循环并打印出所需的输出.当打印出所需的输出时,输出将包含比较答案之前和之后的时间差.

但是循环并没有像我期望的那样运行.所以任何人都可以帮我弄清楚这段代码的问题在哪里?

以下是我的代码:

void startGame(time_t cd,int gl){
    string guessWord;
    time_t start, end, diff,timeLeft;

    cout << "Scrambled word is " << randomizeWord(gl) << endl;

    while (timeLeft != cd || guessWord.compare(originalWord) == 0)
    {
        start = time(0);
        cout << "You have " << cd << " seconds to guess." << endl;
        cout << "Enter guess : ";
        cin >> guessWord;
        end = time(0);
        diff = end - start;
        //total_time = total_time + diff;
        timeLeft = cd - diff;

        if(guessWord.compare(originalWord) != 0)
        { …
Run Code Online (Sandbox Code Playgroud)

c++ loops while-loop

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

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

在C中的strtok并传递参数

我有一个函数,其目的是接收一个由空格分隔的数字数组,一次一个数字,将它们分配给结构的变量,如下所示:

typedef struct coo {
    int x;
    int y;
} Coord;

typedef struct exer {
    Coord coords[1000];
} exercise;


int coordinates(char *sent){
    char * pal;
    int k=0;
    pal = strtok (sent," ");
    while (pal != NULL)
    {
        exercise.coords[k].x=*pal;
        pal = strtok (NULL," ");
        exercise.coords[k].y=*pal;
        pal = strtok (NULL," ");
        k++;
    }
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

问题是稍后打印的坐标与发送中给出的坐标不同.

如果我输入坐标1 2 3 4 5 6,它将给出坐标49 50 51 52 53.

先感谢您.

c arrays pointers strtok

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

c ++:奇怪的双乘法错误

我使用VC++ 2010编译器.我的下面代码给出了509:

double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

谢谢

c++ double

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