一个SVG
文件基本上是一个XML
文件,所以我可以使用字符串<?xml
(或十六进制表示:) '3c 3f 78 6d 6c'
作为一个幻数,但有一些相反的理由不这样做,如果例如有额外的空格,它可以打破这个检查.
我需要/期望检查的其他图像都是二进制文件并且具有幻数.如何在SVG
不使用最终使用Python的扩展名的情况下快速检查文件是否为格式?
魔术数字
正整数是"魔法",当且仅当它可以通过将其重复除以2(如果它是偶数或乘以3然后如果它是奇数则加1)来减少到1.因此,例如,3是神奇的,因为3首先减少到10(3*3 + 1),然后减少到5(10/2),然后减少到16(5*3 + 1),然后减少到8(16/2) ,然后到4(8/2),然后到2(4/2),最后到1(2/2).幻数假设表明所有正整数都是魔术,或者形式上:∀x∈Z,MAGIC(x)其中MAGIC(x)是谓词"x是魔法".
我们应该开发一个C++程序来查找1到50亿的"Magic Numbers".如果正确完成,则需要80秒或更短时间.我的大约需要2个小时,我们给出的示例程序需要14天.这是我的代码,我该怎么做才能加快速度?我错过了明显的优化问题吗?
#include <iostream>
using namespace std;
bool checkMagic(unsigned long number);
int main()
{
for(unsigned long i = 1; i <= 5000000000; i++)
{
if(i % 1000000 == 0)
{
//only print out every 1000000 numbers to keep track, but slow it down
//by printing out every single number
cout<<i<<endl;
}
if(!checkMagic(i))
{
//not magic
cout<<i<<" not a magic number"<<endl;
break;
}
}
}
bool checkMagic(unsigned long number)
{
if(number % 2 == …
Run Code Online (Sandbox Code Playgroud) 我是一个相当新的程序员,如果这些信息很容易获得,我很抱歉,我还没有找到它.
这是我的问题:
当您使用文字数来访问数组的特定元素时,是否被视为幻数?
例如:
arrayOfNumbers[6] // Is six a magic number in this case?
Run Code Online (Sandbox Code Playgroud)
我问这个问题,因为我的一位教授坚持认为程序中的所有字面数字都是魔数.我只是使用实数访问数组的元素,而不是为每个元素使用命名常量,这将是很好的.
谢谢!
现在内置于PhpStorm的JSHint检查告诉了我关于JavaScript魔术数字的信息,并且我意识到这将使更清晰的代码避免使用它们.
我试过这个:
var constants = {
millisecs: 1000,
secs: 60
};
Run Code Online (Sandbox Code Playgroud)
还有这个:
var constants = function () {
this.millisecs = 1000;
this.getMillisecs = function () {
return this.millisecs;
};
};
Run Code Online (Sandbox Code Playgroud)
JsHint抱怨两者.
从这个答案中解决方案虽然运行正常:
var constants = (function() {
var millisecs = 1000,
defaultMsgsPerSecond = 60;
this.getMillisecs = function() { return millisecs; };
this.getDefaultMsgsPerSecond = function() { return defaultMsgsPerSecond; };
})();
Run Code Online (Sandbox Code Playgroud)
大概是因为关闭.为什么这是被接受的,而从另一个SO问题中提出的另外两个建议却不是?
编辑:虽然没有触发错误,但实际上并不起作用.如果说常量未定义则错误.JsFiddle.
澄清 - 通过"作品"我的意思是"不会触发JsHint的警告"
我试图区分"文本文件"和"二进制"文件,因为我实际上想忽略具有"不可读"内容的文件.
我有一个我认为是GZIP档案的文件.我想通过检测魔术数字/文件签名来忽略这种文件.如果我用Notepad ++中的Hex编辑器插件打开文件,我可以看到前三个十六进制代码1f 8b 08
.
但是,如果我使用a读取文件StreamReader
,我不知道如何获取原始字节..
using (var streamReader = new StreamReader(@"C:\file"))
{
char[] buffer = new char[10];
streamReader.Read(buffer, 0, 10);
var s = new String(buffer);
byte[] bytes = new byte[6];
System.Buffer.BlockCopy(s.ToCharArray(), 0, bytes, 0, 6);
var hex = BitConverter.ToString(bytes);
var otherhex = BitConverter.ToString(System.Text.Encoding.UTF8.GetBytes(s.ToCharArray()));
}
Run Code Online (Sandbox Code Playgroud)
在using语句的末尾,我有以下变量值:
hex: "1F-00-FD-FF-08-00"
otherhex: "1F-EF-BF-BD-08-00-EF-BF-BD-EF-BF-BD-0A-51-02-03"
Run Code Online (Sandbox Code Playgroud)
两者都不以Notepad ++中显示的十六进制值开头.
是否可以通过读取文件的结果获取原始字节StreamReader
?
我在GitHub上有一个项目,我在家里的办公室工作.大约2个月,它在两台机器上运行良好.两个星期前,它停止在家用电脑上运行,但在我的工作电脑上仍能正常工作.
这是我得到的错误:
:app:shrinkDebugMultiDexComponents FAILED
FAILURE:构建因异常而失败.
- 出了什么问题:任务执行失败':app:shrinkDebugMultiDexComponents'.java.io.IOException:无法读取[D:\ dev\gitRepo\app\android\app\build\intermediates\multi-dex\debug\allclasses.jar](无法处理类[__MACOSX/com/stripe /android/._BuildConfig.class](类中无效的幻数[51607]))
- 尝试:使用--stacktrace选项运行以获取堆栈跟踪.使用--info或--debug选项运行以获取更多日志输出.
stripe
给我错误的包是你可以在这里找到的第三方库.我将它作为我的build.gradle文件中的依赖项完全按照他们的说法列出.
compile 'com.stripe:stripe-android:+'
Run Code Online (Sandbox Code Playgroud)
我已经注释掉所有stripe
与该应用程序相关的代码并且应用程序运行完全正常,所以我知道它与我如何处理该包有关.
不幸的是,我不记得我做了什么让这个停止工作.我确实认为在发生这一周之前的一周我升级了Android Studio,并花了相当多的时间来搞乱ProGuard
配置.
我尝试过的:
master
在没有进行任何ProGuard
更改的分支上工作.stripe
.我认为这可能与我为ProGuard所做的事情有关,但我不明白如何做.我和Proguard的工作完全不同,有一个干净的AndroidStudio安装,有一个干净的存储库克隆,当我在办公室时,项目仍然正常.
编辑
我在debug
BuildType 上运行它.这些是我的3个gradle文件.第一个是整个项目,第二个是应用程序模块,第三个是本地android库模块.
项目build.gradle
:buildscript {repositories {jcenter()maven {url'http: //download.crashlytics.com/maven '}} dependencies {classpath'com.android.tools.build:grad:1.2.3'classpath'com.crashlytics .tools.gradle:crashlytics-gradle:1.+'}}
allprojects {
repositories {
jcenter()
maven{ url 'http://download.crashlytics.com/maven' }
}
}
Run Code Online (Sandbox Code Playgroud)
Android应用程序模块 build.gradle
buildscript {
repositories {
maven { …
Run Code Online (Sandbox Code Playgroud) 我在一些遗留代码中看到了以下(奇怪的)Javascript舍入函数.谷歌搜索后,我可以看到它在网上很多地方出现.但是我无法弄清楚为什么存在硬编码值8191和10485.
有谁知道为什么这些价值被包括在内有任何合理的理由?如果没有,希望我们可以杀死模因!
function roundNumber(num,dec) {
var newnumber = 0;
if (num > 8191 && num < 10485) {
num = num-5000;
newnumber = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
newnumber = newnumber+5000;
} else {
newnumber = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
}
return newnumber;
}
Run Code Online (Sandbox Code Playgroud) 我知道魔术数字是坏的,但我仍然遇到它们似乎不可避免的时代.我创造了一个例子,我喜欢有人向我展示如何重构和消除神奇的数字.
希望这将有助于我对将来消除它们有不同的看法.
我在CodePen上的例子:http://codepen.io/kevinsperrine/pen/LiGlb
编辑:css文件的第51行包含"幻数".
top: -42px;
Run Code Online (Sandbox Code Playgroud)
编辑2:试图澄清我在问什么:WordPress的风格指南定义了一个CSS幻数作为一次性使用的数字来"修复"(读取:创可贴)一个问题.我要求更多关于如何更改HTML和CSS甚至不需要使用-42px.根据我的经验,似乎这些类型的问题经常出现在Web开发中,所以我以这个案例为例,希望比我更有经验的人可以重构代码,这样就不需要"神奇的数字"了.
我正在查看我在GDB中调试的程序的以下回溯:
Thread 7 (Thread 3983):
#0 0xf7737430 in __kernel_vsyscall ()
#1 0x41b85412 in __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S:142
#2 0x41b80d6d in _L_lock_686 () from libpthread.so.0
#3 0xfbad8001 in ?? ()
#4 0x080eac80 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
Run Code Online (Sandbox Code Playgroud)
特别是我对0xfbad8001的帧地址及其含义感兴趣.
该平台基于x86,因此该未对齐地址无效.鉴于"坏"被编码为十六进制值,我猜这是一个神奇的数字,但到目前为止,我还无法确定是谁设置了这个值或为什么.我试图在谷歌和在线LXR数据库中搜索内核和glibc,但是没有发现任何实际设置此值的代码行.
如果我谷歌搜索"fbad8001",那么有许多点击在回溯和内存转储中显示此地址.所以这个特殊值似乎有一些意义,我假设它是某个地方的神奇数字,但到目前为止我还没能找到设置它的代码.
谁设定了这个值,它意味着什么?
内核基于Linux 3.4.10,glibc为2.15.
除了内核和glibc源代码外,我还通过gcc,gdb和binutils源代码,但仍然没有看到任何吸烟枪.我不知道还能在哪里看.
我正在构建一个从第三方检索并提交给第三方的服务.第三方提供了一个复杂的数据模型,其中包括三种不同的状态类型,所有这些类型的整数都有一个模糊的数字序列.下面提供了一个示例(键:值):
HandlerStatus CustomerStatus ArchiveStatus --- --- --- activeUnallocated:40 draftOpen:0 openOpen:0 activeAllocated:26 submitted:2 closed:1 activePromoted:102 approved:100 Declined:2 declined:1 ... ...
只有有限数量的组合,每个组合都有一个术语(提交,委托给另一个用户,等待确认等).例如:
Combination called "Submitted": HandlerStatus has to be "activeUnallocated" (40) CustomerStatus has to be "submitted" (2) ArchiveStatus has to be "openOpen" (0)
我们可以期待添加其他值,并且用户友好名称可能会随时间而变化.
此外,还有一些操作,例如提交和委托给不需要用户选择新值的其他用户,这意味着服务需要知道在这些操作发生时必须设置的一组组合.
我想到了三种不同的解决方案,各有利弊.
优点:
缺点:
优点:
缺点:
优点:
缺点:
我已经尝试研究最佳实践和模式,以确定哪种解决方案最适合,可维护性和良好的代码设计,但我没有得到任何地方(同时我在开发过程中严重依赖魔术字符串和数字) ).